• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
Keine Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

patch投げ用


Commit MetaInfo

Revision6f7170d7edf00b761828d14c904b62f4ae4c7361 (tree)
Zeit2016-06-11 04:10:48
AutorSHIRAKATA Kentaro <argrath@ub32...>
CommiterSHIRAKATA Kentaro

Log Message

add translation

Ändern Zusammenfassung

Diff

--- a/src/apply.c
+++ b/src/apply.c
@@ -2291,7 +2291,10 @@ struct obj *obj;
22912291 pline("缶詰を作るための缶が切れたようだ.");
22922292 return;
22932293 }
2294+/*JP
22942295 if (!(corpse = floorfood("tin", 2)))
2296+*/
2297+ if (!(corpse = floorfood("缶詰めにする", 2)))
22952298 return;
22962299 if (corpse->oeaten) {
22972300 /*JP
--- a/src/eat.c
+++ b/src/eat.c
@@ -2917,7 +2917,10 @@ doeat()
29172917 pline("息もできないのに,どうやって食べたらいいんだい?");
29182918 return 0;
29192919 }
2920+/*JP
29202921 if (!(otmp = floorfood("eat", 0)))
2922+*/
2923+ if (!(otmp = floorfood("食べる", 0)))
29212924 return 0;
29222925 if (check_capacity((char *) 0))
29232926 return 0;
@@ -3600,8 +3603,13 @@ int corpsecheck; /* 0, no check, 1, corpses, 2, tinnable corpses */
36003603 register struct obj *otmp;
36013604 char qbuf[QBUFSZ];
36023605 char c;
3606+#if 0 /*JP*/
36033607 boolean feeding = !strcmp(verb, "eat"), /* corpsecheck==0 */
36043608 offering = !strcmp(verb, "sacrifice"); /* corpsecheck==1 */
3609+#else
3610+ boolean feeding = !strcmp(verb, "食べる"), /* corpsecheck==0 */
3611+ offering = !strcmp(verb, "捧げる"); /* corpsecheck==1 */
3612+#endif
36053613
36063614 #if 1 /*JP*/
36073615 const char *jverb = trans_verb(verb)->jp;
--- a/src/files.c
+++ b/src/files.c
@@ -3524,7 +3524,10 @@ unsigned oid; /* book identifier */
35243524
35253525 int scope = 0;
35263526 int linect = 0, passagecnt = 0, targetpassage = 0;
3527+/*JP
35273528 const char *badtranslation = "an incomprehensible foreign translation";
3529+*/
3530+ const char *badtranslation = "不完全な外国語翻訳";
35283531 boolean matchedsection = FALSE, matchedtitle = FALSE;
35293532 winid tribwin = WIN_ERR;
35303533 boolean grasped = FALSE;
@@ -3533,7 +3536,10 @@ unsigned oid; /* book identifier */
35333536 /* check for mandatories */
35343537 if (!tribsection || !tribtitle) {
35353538 if (!nowin_buf)
3539+/*JP
35363540 pline("It's %s of \"%s\"!", badtranslation, tribtitle);
3541+*/
3542+ pline("これは「%s」の%sだ!", tribtitle, badtranslation);
35373543 return grasped;
35383544 }
35393545
@@ -3544,7 +3550,10 @@ unsigned oid; /* book identifier */
35443550 if (!fp) {
35453551 /* this is actually an error - cannot open tribute file! */
35463552 if (!nowin_buf)
3553+/*JP
35473554 pline("You feel too overwhelmed to continue!");
3555+*/
3556+ pline("あなたは続けられないほど圧倒された!");
35483557 return grasped;
35493558 }
35503559
@@ -3674,7 +3683,10 @@ cleanup:
36743683 grasped = TRUE;
36753684 } else {
36763685 if (!nowin_buf)
3686+/*JP
36773687 pline("It seems to be %s of \"%s\"!", badtranslation, tribtitle);
3688+*/
3689+ pline("これは「%s」の%sのようだ!", tribtitle, badtranslation);
36783690 else
36793691 if (foundpassage)
36803692 grasped = TRUE;
--- a/src/pray.c
+++ b/src/pray.c
@@ -1613,7 +1613,10 @@ dosacrifice()
16131613 highaltar = ((Is_astralevel(&u.uz) || Is_sanctum(&u.uz))
16141614 && (levl[u.ux][u.uy].altarmask & AM_SHRINE));
16151615
1616+/*JP
16161617 otmp = floorfood("sacrifice", 1);
1618+*/
1619+ otmp = floorfood("捧げる", 1);
16171620 if (!otmp)
16181621 return 0;
16191622 /*
@@ -1868,14 +1871,31 @@ dosacrifice()
18681871 if (u.ualign.record > -99)
18691872 u.ualign.record = -99;
18701873 /*[apparently shrug/snarl can be sensed without being seen]*/
1874+#if 0 /*JP*/
18711875 pline("%s shrugs and retains dominion over %s,", Moloch,
18721876 u_gname());
1877+#else
1878+ pline("%sは肩をすくめ,%sに対する優勢を維持した.", Moloch,
1879+ u_gname());
1880+#endif
1881+/*JP
18731882 pline("then mercilessly snuffs out your life.");
1883+*/
1884+ pline("そして無慈悲にあなたの命を奪った.");
1885+/*JP
1886+*/
1887+#if 0 /*JP*/
18741888 Sprintf(killer.name, "%s indifference", s_suffix(Moloch));
1889+#else
1890+ Sprintf(killer.name, "冷淡な%s", Moloch);
1891+#endif
18751892 killer.format = KILLED_BY;
18761893 done(DIED);
18771894 /* life-saved (or declined to die in wizard/explore mode) */
1895+/*JP
18781896 pline("%s snarls and tries again...", Moloch);
1897+*/
1898+ pline("%sはののしり,もう一度試した...", Moloch);
18791899 fry_by_god(A_NONE, TRUE); /* wrath of Moloch */
18801900 /* declined to die in wizard or explore mode */
18811901 pline(cloud_of_smoke, hcolor(NH_BLACK));
@@ -2615,6 +2635,7 @@ aligntyp alignment;
26152635 }
26162636
26172637 static const char *hallu_gods[] = {
2638+#if 0 /*JP*/
26182639 "the Flying Spaghetti Monster", /* Church of the FSM */
26192640 "Eris", /* Discordianism */
26202641 "the Martians", /* every science fiction ever */
@@ -2629,6 +2650,22 @@ static const char *hallu_gods[] = {
26292650 "the Ori", /* Stargate */
26302651 "destiny", /* why not? */
26312652 "your Friend the Computer", /* Paranoia */
2653+#else
2654+ "空飛ぶスパゲッティモンスター", /* Church of the FSM */
2655+ "エリス", /* Discordianism */
2656+ "火星人", /* every science fiction ever */
2657+ "ゾム", /* Crawl */
2658+ "アンドール・ドラコン", /* ADOM */
2659+ "イェンダー中央銀行", /* economics */
2660+ "歯の妖精", /* real world(?) */
2661+ "オム", /* Discworld */
2662+ "ヨーグモス", /* Magic: the Gathering */
2663+ "モルゴス", /* LoTR */
2664+ "クトゥルフ", /* Lovecraft */
2665+ "オーライ", /* Stargate */
2666+ "ネ申", /* why not? */
2667+ "親愛なるコンピュータ", /* Paranoia */
2668+#endif
26322669 };
26332670
26342671 /* hallucination handling for priest/minion names: select a random god
--- a/src/questpgr.c
+++ b/src/questpgr.c
@@ -2,6 +2,11 @@
22 /* Copyright 1991, M. Stephenson */
33 /* NetHack may be freely redistributed. See license for details. */
44
5+/* JNetHack Copyright */
6+/* (c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000 */
7+/* For 3.4-, Copyright (c) SHIRAKATA Kentaro, 2002-2016 */
8+/* JNetHack may be freely redistributed. See license for details. */
9+
510 #include "hack.h"
611 #include "dlb.h"
712
@@ -262,9 +267,11 @@ char who, /* 'd' => deity, 'l' => leader, 'n' => nemesis, 'o' => artifact */
262267 : (lwhich == 'j') ? genders[g].his : "?";
263268 }
264269 Strcpy(cvt_buf, pnoun);
270+#if 0 /*JP*/
265271 /* capitalize for H,I,J */
266272 if (lwhich != which)
267273 cvt_buf[0] = highc(cvt_buf[0]);
274+#endif
268275 return;
269276 }
270277
@@ -322,6 +329,7 @@ char c;
322329 case 'O':
323330 case 'o':
324331 str = the(artiname(urole.questarti));
332+#if 0 /*JP*/
325333 if (c == 'O') {
326334 /* shorten "the Foo of Bar" to "the Foo"
327335 (buffer returned by the() is modifiable) */
@@ -330,6 +338,7 @@ char c;
330338 if (p)
331339 *p = '\0';
332340 }
341+#endif
333342 break;
334343 case 'n':
335344 str = neminame();
@@ -424,7 +433,9 @@ char *in_line, *out_line;
424433
425434 /* capitalize */
426435 case 'C':
436+#if 0 /*JP*/
427437 cvt_buf[0] = highc(cvt_buf[0]);
438+#endif
428439 break;
429440
430441 /* replace name with pronoun;
@@ -443,25 +454,31 @@ char *in_line, *out_line;
443454
444455 /* pluralize */
445456 case 'P':
457+#if 0 /*JP*/
446458 cvt_buf[0] = highc(cvt_buf[0]);
459+#endif
447460 case 'p':
448461 Strcpy(cvt_buf, makeplural(cvt_buf));
449462 break;
450463
451464 /* append possessive suffix */
452465 case 'S':
466+#if 0 /*JP*/
453467 cvt_buf[0] = highc(cvt_buf[0]);
468+#endif
454469 case 's':
455470 Strcpy(cvt_buf, s_suffix(cvt_buf));
456471 break;
457472
458473 /* strip any "the" prefix */
459474 case 't':
475+#if 0 /*JP*/
460476 if (!strncmpi(cvt_buf, "the ", 4)) {
461477 Strcat(cc, &cvt_buf[4]);
462478 cc += strlen(cc);
463479 continue; /* for */
464480 }
481+#endif
465482 break;
466483
467484 default:
--- a/src/read.c
+++ b/src/read.c
@@ -78,6 +78,7 @@ char *buf;
7878 {
7979 static const char *shirt_msgs[] = {
8080 /* Scott Bigham */
81+#if 0 /*JP*/
8182 "I explored the Dungeons of Doom and all I got was this lousy T-shirt!",
8283 "Is that Mjollnir in your pocket or are you just happy to see me?",
8384 "It's not the size of your sword, it's how #enhance'd you are with it.",
@@ -94,7 +95,26 @@ char *buf;
9495 "Don't Panic", /* HHGTTG */
9596 "Furinkan High School Athletic Dept.", /* Ranma 1/2 */
9697 "Hel-LOOO, Nurse!", /* Animaniacs */
98+#else
99+ "私は運命の迷宮を調査していたが,手に入れたのはきたないTシャツだけだった!",
100+ "ポケットにミュルニールが入っているの?それとも私に会えてうれしい?",
101+ "剣の大きさが問題なのではない.それが如何に#enhanceされているかなのだ.",
102+ "マダム・エルバイラのサキュバス館 永久顧客",
103+ "マダム・エルバイラのサキュバス館 今月の最優秀功労者",
104+ "ローディオス金庫の番人,それは暗く小さい部屋の中",
105+ "イェンダー軍兵士,それは巨大な団体の中",
106+ "私はイェンダー軍の新兵訓練所を乗り越えました",
107+ "ローディオス会計学校 室内ラクロスチーム",
108+ "Oracle(TM) の泉 第10回濡れTシャツコンテスト",
109+ "おい,黒ドラゴン!こいつを分解しろ!",
110+ "馬鹿と一緒にいます → ",
111+ "私は悪くない!Izchakに投票したもの!",
112+ "あ わ て る な", /* 銀河ヒッチハイクガイド */
113+ "風林館高校陸上部", /* Ranma 1/2 */
114+ "Hel−LOOO,Nurse!", /* Animaniacs */
115+#endif
97116 "=^.^=",
117+#if 0 /*JP*/
98118 "100% goblin hair - do not wash",
99119 "Aberzombie and Fitch",
100120 "cK -- Cockatrice touches the Kop",
@@ -112,6 +132,26 @@ char *buf;
112132 "I am not a pack rat - I am a collector",
113133 "I bounced off a rubber tree", /* Monkey Island */
114134 "Plunder Island Brimstone Beach Club", /* Monkey Island */
135+#else
136+ "ゴブリン毛100% - 洗えません",
137+ "アバゾンビ&フィッチ",
138+ "cK -- コカトリスが警官にタッチ",
139+ "質問しないで; 私はここを探検しているだけ",
140+ "Down with pants!",
141+ "dはあなたの犬か殺人者か?",
142+ "FREE PUG AND NEWT!",
143+ "Go team ant!",
144+ "Got newt?",
145+ "こんにちはダーリン!", /* Charlie Drake */
146+ "やあ!ニンフ!このTシャツを盗んで!",
147+ "I <3 Dungeon of Doom",
148+ "I <3 Maud",
149+ "私はバルキリーだ.私が走っているのを見たら,ついてこい.",
150+ "私はゴミ集めではない.私は収集家だ",
151+ "私はゴムの木に跳ね返った", /* Monkey Island */
152+ "略奪島硫黄海岸クラブ", /* Monkey Island */
153+#endif
154+#if 0 /*JP*/
115155 "If you can read this, I can hit you with my polearm",
116156 "I'm confused!",
117157 "I scored with the princess",
@@ -127,6 +167,24 @@ char *buf;
127167 "Somebody stole my Mojo!",
128168 "The Hellhound Gang",
129169 "The Werewolves",
170+#else
171+ "これが読めるなら、私の長斧が届くということだ",
172+ "私は混乱しています!",
173+ "I scored with the princess",
174+ "私は永遠に生きるか、そのために死にたい.",
175+ "Lichen Park",
176+ "考え込んでいます - 捜索隊を出してください",
177+ "肉はモルドール",
178+ "鉱山街商業改善協会",
179+ "鉱山街の見張り",
180+ "パーム女史の交渉技術の家 -- とても評判の悪評の家",
181+ "鉱山ダッシュ中",
182+ "本物の男はクロムを愛する",
183+ "誰かが俺のアレを盗んだ!",
184+ "The Hellhound Gang",
185+ "The Werewolves",
186+#endif
187+#if 0 /*JP*/
130188 "They Might Be Storm Giants",
131189 "Weapons don't kill people, I kill people",
132190 "White Zombie",
@@ -144,6 +202,25 @@ char *buf;
144202 "Pudding farmer",
145203 "Vegetarian",
146204 "Hello, I'm War!",
205+#else
206+ "ゼイ・マイト・ビー・ストーム・ジャイアンツ",
207+ "武器が人を殺すのではない,私が人を殺すのだ",
208+ "White Zombie",
209+ "いい加減にして!",
210+ "アンフル州立大学 - 火蟻との戦いの本拠地!",
211+ "FREE HUGS",
212+ "特別昇天者",
213+ "本当の男はバルキリーだ",
214+ "青年洞窟掘削連盟",
215+ "ローディオス砦を占拠せよ",
216+ "このTシャツを買うお金がなかったのでこれは盗んだ!",
217+ "マインドフレヤ氏ね",
218+ "私はパンツを穿いていません",
219+ "Down with the living!",
220+ "プリン農家",
221+ "ベジタリアン",
222+ "やあ,私が『戦争』だ!",
223+#endif
147224 };
148225
149226 Strcpy(buf, shirt_msgs[tshirt->o_id % SIZE(shirt_msgs)]);
@@ -233,6 +310,7 @@ doread()
233310 return 1;
234311 } else if (scroll->otyp == CREDIT_CARD) {
235312 static const char *card_msgs[] = {
313+#if 0 /*JP*/
236314 "Leprechaun Gold Tru$t - Shamrock Card",
237315 "Magic Memory Vault Charge Card", "Larn National Bank", /* Larn */
238316 "First Bank of Omega", /* Omega */
@@ -246,6 +324,21 @@ doread()
246324 "Yendorian Express - Gold Card",
247325 "Yendorian Express - Mithril Card",
248326 "Yendorian Express - Platinum Card", /* must be last */
327+#else
328+ "レプラコーン信用金庫 - クローバーカード",
329+ "魔法記念倉庫クレジットカード", "ラーン国営銀行", /* Larn */
330+ "オメガ第一銀行", /* Omega */
331+ "ゾーク銀行 - Bank of Zork - フロボズ魔法カード", /* Zork */
332+ "アンクモルポーク商人ギルド 交易カード",
333+ "アンクモルポーク盗賊ギルド 無制限取引カード",
334+ "ランスマンスベイ貸金業協会",
335+ "ゲヘナ銀行 - 利子99%カード",
336+ "イェンダー印エキスプレスカード - カッパーカード",
337+ "イェンダー印エキスプレスカード - シルバーカード",
338+ "イェンダー印エキスプレスカード - ゴールドカード",
339+ "イェンダー印エキスプレスカード - ミスリルカード",
340+ "イェンダー印エキスプレスカード - プラチナカード", /* must be last */
341+#endif
249342 };
250343
251344 if (Blind) {
@@ -285,7 +378,7 @@ doread()
285378 /*JP
286379 You_cant("feel any Braille writing.");
287380 */
288- You("点字はどうも書いてないようだ.");
381+ pline("点字はどうも書いてないようだ.");
289382 return 0;
290383 }
291384 if (flags.verbose)
@@ -345,7 +438,7 @@ doread()
345438 /*JP
346439 You_cant("feel any Braille writing.");
347440 */
348- You("点字はどうも書いてないようだ.");
441+ pline("点字はどうも書いてないようだ.");
349442 return 0;
350443 }
351444 /*JP
@@ -1634,12 +1727,23 @@ struct obj *sobj; /* scroll, or fake spellbook object for scroll-like spell */
16341727 }
16351728 }
16361729 if (!results) {
1730+#if 0 /*JP*/
16371731 pline("Nothing interesting %s.",
16381732 !candidates ? "happens" : "seems to happen");
1733+#else
1734+ pline("何も面白いことはおこらなかった%s.",
1735+ !candidates ? "" : "ようだ");
1736+#endif
16391737 } else {
1738+#if 0 /*JP*/
16401739 pline_The("neighborhood %s %sfriendlier.",
16411740 vis_results ? "is" : "seems",
16421741 (results < 0) ? "un" : "");
1742+#else
1743+ pline_The("お隣との仲が%sくなった%s.",
1744+ (results < 0) ? "悪" : "良",
1745+ vis_results ? "" : "ようだ");
1746+#endif
16431747 if (vis_results > 0)
16441748 known = TRUE;
16451749 }
@@ -1725,7 +1829,10 @@ struct obj *sobj; /* scroll, or fake spellbook object for scroll-like spell */
17251829 /* when casting a spell we know we're not confused,
17261830 so inventory must be empty (another message has
17271831 already been given above if reading a scroll) */
1832+/*JP
17281833 pline("You're not carrying anything to be identified.");
1834+*/
1835+ pline("あなたは識別できるものをなにも持っていない.");
17291836 }
17301837 break;
17311838 case SCR_CHARGING:
@@ -1942,7 +2049,10 @@ struct obj *sobj; /* scroll, or fake spellbook object for scroll-like spell */
19422049 if (!sblessed) {
19432050 drop_boulder_on_player(confused, !scursed, TRUE, FALSE);
19442051 } else if (!nboulders)
2052+/*JP
19452053 pline("But nothing else happens.");
2054+*/
2055+ pline("しかし他に何もおこらなかった.");
19462056 }
19472057 break;
19482058 case SCR_PUNISHMENT:
@@ -2081,9 +2191,15 @@ boolean confused, byu;
20812191 if (mtmp->minvis && !canspotmon(mtmp))
20822192 map_invisible(mtmp->mx, mtmp->my);
20832193 } else if (u.uswallow && mtmp == u.ustuck)
2194+#if 0 /*JP*/
20842195 You_hear("something hit %s %s over your %s!",
20852196 s_suffix(mon_nam(mtmp)), mbodypart(mtmp, STOMACH),
20862197 body_part(HEAD));
2198+#else
2199+ You_hear("何かがあなたの%sの上の%sの%sに当たった音を聞いた!",
2200+ body_part(HEAD),
2201+ s_suffix(mon_nam(mtmp)), mbodypart(mtmp, STOMACH));
2202+#endif
20872203
20882204 mdmg = dmgval(otmp2, mtmp) * otmp2->quan;
20892205 if (helmet) {
@@ -2117,7 +2233,10 @@ boolean confused, byu;
21172233 if (byu)
21182234 xkilled(mtmp, 1);
21192235 else {
2236+/*JP
21202237 pline("%s is killed.", Monnam(mtmp));
2238+*/
2239+ pline("%sは死んだ.", Monnam(mtmp));
21212240 mondied(mtmp);
21222241 }
21232242 }
@@ -2661,10 +2780,11 @@ int how;
26612780 } else {
26622781 Strcpy(buf, ptr->mname); /* make sure we have standard singular */
26632782 if ((ptr->geno & G_UNIQ) && ptr != &mons[PM_HIGH_PRIEST])
2664-/*JP
2783+#if 0 /*JP*/
26652784 which = !type_is_pname(ptr) ? "the " : "";
2666-*/
2667- which = !type_is_pname(ptr) ? "" : "";
2785+#else
2786+ which = "";
2787+#endif
26682788 }
26692789 if (how & REALLY) {
26702790 /* setting no-corpse affects wishing and random tin generation */
--- a/src/region.c
+++ b/src/region.c
@@ -2,6 +2,11 @@
22 /* Copyright (c) 1996 by Jean-Christophe Collet */
33 /* NetHack may be freely redistributed. See license for details. */
44
5+/* JNetHack Copyright */
6+/* (c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000 */
7+/* For 3.4-, Copyright (c) SHIRAKATA Kentaro, 2002-2016 */
8+/* JNetHack may be freely redistributed. See license for details. */
9+
510 #include "hack.h"
611 #include "lev.h"
712
--- a/src/role.c
+++ b/src/role.c
@@ -2,6 +2,11 @@
22 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985-1999. */
33 /* NetHack may be freely redistributed. See license for details. */
44
5+/* JNetHack Copyright */
6+/* (c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000 */
7+/* For 3.4-, Copyright (c) SHIRAKATA Kentaro, 2002-2016 */
8+/* JNetHack may be freely redistributed. See license for details. */
9+
510 #include "hack.h"
611
712 /*** Table of all roles ***/
--- a/src/rumors.c
+++ b/src/rumors.c
@@ -2,6 +2,11 @@
22 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
33 /* NetHack may be freely redistributed. See license for details. */
44
5+/* JNetHack Copyright */
6+/* (c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000 */
7+/* For 3.4-, Copyright (c) SHIRAKATA Kentaro, 2002-2016 */
8+/* JNetHack may be freely redistributed. See license for details. */
9+
510 #include "hack.h"
611 #include "lev.h"
712 #include "dlb.h"
--- a/src/save.c
+++ b/src/save.c
@@ -2,6 +2,11 @@
22 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
33 /* NetHack may be freely redistributed. See license for details. */
44
5+/* JNetHack Copyright */
6+/* (c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000 */
7+/* For 3.4-, Copyright (c) SHIRAKATA Kentaro, 2002-2016 */
8+/* JNetHack may be freely redistributed. See license for details. */
9+
510 #include "hack.h"
611 #include "lev.h"
712
--- a/src/shk.c
+++ b/src/shk.c
@@ -34,7 +34,9 @@ STATIC_VAR NEARDATA long int followmsg; /* last time of follow message */
3434 STATIC_VAR const char and_its_contents[] = " and its contents";
3535 */
3636 STATIC_VAR const char and_its_contents[] = "中身を合わせて";
37+#if 0 /*JP*/
3738 STATIC_VAR const char the_contents_of[] = "the contents of ";
39+#endif
3840
3941 STATIC_DCL void FDECL(append_honorific, (char *));
4042 STATIC_DCL void FDECL(setpaid, (struct monst *));
@@ -638,9 +640,15 @@ char *enterstring;
638640 */
639641 pline("%sは泥棒をののしった.", shkname(shkp));
640642 } else {
643+#if 0 /*JP*/
641644 verbalize("%s, %s! Welcome%s to %s %s!", Hello(shkp), plname,
642645 eshkp->visitct++ ? " again" : "", s_suffix(shkname(shkp)),
643646 shtypes[rt - SHOPBASE].name);
647+#else
648+ verbalize("%s!%sの%sに%s!", Hello(shkp), shkname(shkp),
649+ shtypes[rt - SHOPBASE].name,
650+ eshkp->visitct++ ? "また来ましたね" : "ようこそ");
651+#endif
644652 }
645653 /* can't do anything about blocking if teleported in */
646654 if (!inside_shop(u.ux, u.uy)) {
@@ -2465,16 +2473,28 @@ boolean quietly;
24652473 && obj->otyp == CANDELABRUM_OF_INVOCATION) {
24662474 if (!quietly) {
24672475 if (is_izchak(shkp, TRUE) && !u.uevent.invoked) {
2476+/*JP
24682477 verbalize("No thanks, I'd hang onto that if I were you.");
2478+*/
2479+ verbalize("いや,いらない.私ならそれを手放さないね.");
24692480 if (obj->spe < 7)
2481+#if 0 /*JP*/
24702482 verbalize(
24712483 "You'll need %d%s candle%s to go along with it.",
24722484 (7 - obj->spe), (obj->spe > 0) ? " more" : "",
24732485 plur(7 - obj->spe));
2486+#else
2487+ verbalize(
2488+ "それを使うには%s%d本のろうそくが必要だ.",
2489+ (obj->spe > 0) ? "あと" : "", (7 - obj->spe));
2490+#endif
24742491 /* [what if hero is already carrying enough candles?
24752492 should Izchak explain how to attach them instead] */
24762493 } else {
2494+/*JP
24772495 verbalize("I won't stock that. Take it out of here!");
2496+*/
2497+ verbalize("それは仕入れないよ.持っていきなさい!");
24782498 }
24792499 }
24802500 return TRUE;
@@ -2605,7 +2625,10 @@ struct monst *shkp;
26052625 eshkp = ESHK(shkp);
26062626
26072627 if (eshkp->billct == BILLSZ) {
2628+/*JP
26082629 You("got that for free!");
2630+*/
2631+ You("それをただで手に入れた!");
26092632 return;
26102633 }
26112634
@@ -2895,11 +2918,13 @@ char *buf;
28952918 };
28962919 #endif
28972920 Strcat(buf, honored[rn2(SIZE(honored) - 1) + u.uevent.udemigod]);
2921+#if 0 /*JP*//*日本語ではそこまでしない*/
28982922 if (is_vampire(youmonst.data))
28992923 Strcat(buf, (flags.female) ? " dark lady" : " dark lord");
29002924 else if (is_elf(youmonst.data))
29012925 Strcat(buf, (flags.female) ? " hiril" : " hir");
29022926 else
2927+#endif
29032928 #if 0 /*JP*/
29042929 Strcat(buf, !is_human(youmonst.data) ? " creature" : (flags.female)
29052930 ? " lady"
@@ -3323,9 +3348,15 @@ xchar x, y;
33233348 currency(delta));
33243349 #endif
33253350 else
3351+#if 0 /*JP*/
33263352 pline("%ld %s added to your credit; total is now %ld %s.",
33273353 delta, currency(delta), eshkp->credit,
33283354 currency(eshkp->credit));
3355+#else
3356+ pline("預け金に%ld%s追加された; 合計は%ld%sになった..",
3357+ delta, currency(delta), eshkp->credit,
3358+ currency(eshkp->credit));
3359+#endif
33293360 }
33303361
33313362 if (!offer) {
@@ -4918,7 +4949,7 @@ boolean silent;
49184949 pline_The("Kop%s (disappointed) vanish%s into thin air.",
49194950 plur(cnt), (cnt == 1) ? "es" : "");
49204951 #else
4921- pline("がっかりした警官は空気にとけて消えた.");
4952+ pline("警官は(がっかりして)姿を消した.");
49224953 #endif
49234954 }
49244955
@@ -5021,11 +5052,20 @@ boolean altusage;
50215052 fmt = "%s%s値段は%ld%s(イェンダー燃料税)だ.";
50225053 } else if (altusage && (otmp->otyp == BAG_OF_TRICKS
50235054 || otmp->otyp == HORN_OF_PLENTY)) {
5055+/*JP
50245056 fmt = "%s%sEmptying that will cost you %ld %s.";
5057+*/
5058+ fmt = "%s%sそれの使用料は%ld%sだ.";
50255059 if (!rn2(3))
5060+/*JP
50265061 arg1 = "Whoa! ";
5062+*/
5063+ arg1 = "うわ!";
50275064 if (!rn2(3))
5065+/*JP
50285066 arg1 = "Watch it! ";
5067+*/
5068+ arg1 = "気をつけろ!";
50295069 } else {
50305070 /*JP
50315071 fmt = "%s%sUsage fee, %ld %s.";
--- a/src/shknam.c
+++ b/src/shknam.c
@@ -496,8 +496,13 @@ boolean mkspecl;
496496 int atype;
497497
498498 /* 3.6.0 tribute */
499+#if 0 /*JP*/
499500 if (mkspecl && (!strcmp(shp->name, "rare books")
500501 || !strcmp(shp->name, "second-hand bookstore"))) {
502+#else
503+ if (mkspecl && (!strcmp(shp->name, "幻の本屋")
504+ || !strcmp(shp->name, "古書店"))) {
505+#endif
501506 struct obj *novel = mksobj_at(SPE_NOVEL, sx, sy, FALSE, FALSE);
502507
503508 if (novel)
--- a/src/spell.c
+++ b/src/spell.c
@@ -164,7 +164,11 @@ struct obj *bp;
164164 */
165165 pline("この本は接触型の毒で覆われている!");
166166 if (uarmg) {
167+#if 0 /*JP*/
167168 erode_obj(uarmg, "gloves", ERODE_CORRODE, EF_GREASE | EF_VERBOSE);
169+#else
170+ erode_obj(uarmg, "小手", ERODE_CORRODE, EF_GREASE | EF_VERBOSE);
171+#endif
168172 break;
169173 }
170174 /* temp disable in_use; death should not destroy the book */
@@ -534,7 +538,10 @@ register struct obj *spellbook;
534538
535539 /* attempting to read dull book may make hero fall asleep */
536540 if (!confused && booktype != SPE_BLANK_PAPER
541+/*JP
537542 && !strcmp(OBJ_DESCR(objects[booktype]), "dull")) {
543+*/
544+ && !strcmp(OBJ_DESCR(objects[booktype]), "鉛色の魔法書")) {
538545 const char *eyes;
539546 int dullbook = rnd(25) - ACURR(A_WIS);
540547
@@ -546,7 +553,10 @@ register struct obj *spellbook;
546553 eyes = body_part(EYE);
547554 if (eyecount(youmonst.data) > 1)
548555 eyes = makeplural(eyes);
556+/*JP
549557 pline("This book is so dull that you can't keep your %s open.",
558+*/
559+ pline("この本は退屈すぎて%sを開けていられない.",
550560 eyes);
551561 dullbook += rnd(2 * objects[booktype].oc_level);
552562 fall_asleep(-dullbook, TRUE);
@@ -700,7 +710,7 @@ register struct obj *spellbook;
700710 /*JP
701711 set_occupation(learn, "studying", 0);
702712 */
703- set_occupation(learn, "学ぶ", 0);
713+ set_occupation(learn, "学ぶ", 0);
704714 return 1;
705715 }
706716
@@ -754,7 +764,10 @@ rejectcasting()
754764 {
755765 /* rejections which take place before selecting a particular spell */
756766 if (Stunned) {
767+/*JP
757768 You("are too impaired to cast a spell.");
769+*/
770+ You("魔法を唱えられない.");
758771 return TRUE;
759772 } else if (!freehand()) {
760773 /* Note: !freehand() occurs when weapon and shield (or two-handed
@@ -1565,24 +1578,51 @@ losespells()
15651578 * appended to the end of the list?
15661579 */
15671580 static const char *spl_sortchoices[] = {
1581+/*JP
15681582 "by casting letter",
1583+*/
1584+ "選択する文字順",
15691585 #define SORTBY_LETTER 0
1586+/*JP
15701587 "alphabetically",
1588+*/
1589+ "文字コード順",
15711590 #define SORTBY_ALPHA 1
1591+/*JP
15721592 "by level, low to high",
1593+*/
1594+ "レベル昇順",
15731595 #define SORTBY_LVL_LO 2
1596+/*JP
15741597 "by level, high to low",
1598+*/
1599+ "レベル降順",
15751600 #define SORTBY_LVL_HI 3
1601+/*JP
15761602 "by skill group, alphabetized within each group",
1603+*/
1604+ "スキルグループ毎に文字コード順",
15771605 #define SORTBY_SKL_AL 4
1606+/*JP
15781607 "by skill group, low to high level within group",
1608+*/
1609+ "スキルグループ毎にレベル昇順",
15791610 #define SORTBY_SKL_LO 5
1611+/*JP
15801612 "by skill group, high to low level within group",
1613+*/
1614+ "スキルグループ毎にレベル降順",
15811615 #define SORTBY_SKL_HI 6
1616+/*JP
15821617 "maintain current ordering",
1618+*/
1619+ "現在の順序を維持",
15831620 #define SORTBY_CURRENT 7
15841621 /* a menu choice rather than a sort choice */
1622+/*JP
15851623 "reassign casting letters to retain current order",
1624+*/
1625+ "現在の順序を変えずに選択する文字を再割り当て",
15861626 #define SORTRETAINORDER 8
15871627 };
15881628 static int spl_sortmode = 0; /* index into spl_sortchoices[] */
--- a/src/steal.c
+++ b/src/steal.c
@@ -647,24 +647,39 @@ int ochance, achance; /* percent chance for ordinary item, artifact */
647647 if (cansee(mon->mx, mon->my)) {
648648 const char *MonName = Monnam(mon);
649649
650+#if 0 /*JP*//*日本語では不要*/
650651 /* mon might be invisible; avoid "It pulls ... and absorbs it!" */
651652 if (!strcmp(MonName, "It"))
652653 MonName = "Something";
654+#endif
655+#if 0 /*JP*/
653656 pline("%s pulls %s away from you and absorbs %s!", MonName,
654657 yname(obj), (obj->quan > 1L) ? "them" : "it");
658+#else
659+ pline("%sは%sを引っぱり込んで吸収した!", MonName,
660+ yname(obj));
661+#endif
655662 } else {
656663 const char *hand_s = body_part(HAND);
657664
658665 if (bimanual(obj))
659666 hand_s = makeplural(hand_s);
667+#if 0 /*JP*/
660668 pline("%s %s pulled from your %s!", upstart(yname(obj)),
661669 otense(obj, "are"), hand_s);
670+#else
671+ pline("%sはあなたの%sから引っぱり込まれた!", upstart(yname(obj)),
672+ hand_s);
673+#endif
662674 }
663675 freeinv(obj);
664676 } else {
665677 /* not carried; presumably thrown or kicked */
666678 if (canspotmon(mon))
679+/*JP
667680 pline("%s absorbs %s!", Monnam(mon), yname(obj));
681+*/
682+ pline("%sは%sを吸収した!", Monnam(mon), yname(obj));
668683 }
669684 /* add to mon's inventory */
670685 (void) mpickobj(mon, obj);
@@ -751,8 +766,13 @@ boolean is_pet; /* If true, pet should keep wielded/worn items */
751766 /* vault guard's gold goes away rather than be dropped... */
752767 if (mtmp->isgd && (otmp = findgold(mtmp->minvent)) != 0) {
753768 if (canspotmon(mtmp))
769+#if 0 /*JP*/
754770 pline("%s gold %s.", s_suffix(Monnam(mtmp)),
755771 canseemon(mtmp) ? "vanishes" : "seems to vanish");
772+#else
773+ pline("%sの金は消えた%s.", Monnam(mtmp),
774+ canseemon(mtmp) ? "" : "ようだ");
775+#endif
756776 obj_extract_self(otmp);
757777 obfree(otmp, (struct obj *) 0);
758778 } /* isgd && has gold */
--- a/src/steed.c
+++ b/src/steed.c
@@ -824,7 +824,10 @@ struct monst *steed;
824824 }
825825 }
826826 if (wasimmobile && !steed->msleeping && steed->mcanmove)
827+/*JP
827828 pline("%s wakes up.", Monnam(steed));
829+*/
830+ pline("%sは起きた.", Monnam(steed));
828831 /* regardless of waking, terminate any meal in progress */
829832 finish_meating(steed);
830833 }
@@ -840,12 +843,18 @@ boolean checkfeeding;
840843 if (steed) {
841844 /* check whether steed can move */
842845 if (steed->msleeping || !steed->mcanmove) {
846+/*JP
843847 pline("%s won't move!", upstart(y_monnam(steed)));
848+*/
849+ pline("%sは動けない!", y_monnam(steed));
844850 return TRUE;
845851 }
846852 /* optionally check whether steed is in the midst of a meal */
847853 if (checkfeeding && steed->meating) {
854+/*JP
848855 pline("%s is still eating.", upstart(y_monnam(steed)));
856+*/
857+ pline("%sはまだ食べている.", y_monnam(steed));
849858 return TRUE;
850859 }
851860 }
--- a/src/teleport.c
+++ b/src/teleport.c
@@ -498,7 +498,10 @@ struct obj *scroll;
498498 }
499499 } else if (scroll && scroll->blessed) {
500500 /* (this used to be handled in seffects()) */
501+/*JP
501502 if (yn("Do you wish to teleport?") == 'n')
503+*/
504+ if (yn("瞬間移動しますか?") == 'n')
502505 return TRUE;
503506 result = TRUE;
504507 }
--- a/src/timeout.c
+++ b/src/timeout.c
@@ -45,8 +45,13 @@ stoned_dialogue()
4545 char buf[BUFSZ];
4646
4747 Strcpy(buf, stoned_texts[SIZE(stoned_texts) - i]);
48+#if 0 /*JP*/
4849 if (nolimbs(youmonst.data) && strstri(buf, "limbs"))
4950 (void) strsubst(buf, "limbs", "extremities");
51+#else
52+ if (nolimbs(youmonst.data) && strstri(buf, "手足"))
53+ (void) strsubst(buf, "手足", "先端");
54+#endif
5055 pline1(buf);
5156 }
5257 switch ((int) i) {
@@ -126,7 +131,10 @@ vomiting_dialogue()
126131 case 2:
127132 txt = vomiting_texts[4];
128133 if (cantvomit(youmonst.data))
134+/*JP
129135 txt = "gag uncontrolably.";
136+*/
137+ txt = "気分の悪さが抑えられなくなった.";
130138 break;
131139 case 0:
132140 stop_occupation();
@@ -218,8 +226,13 @@ slime_dialogue()
218226 char buf[BUFSZ];
219227
220228 Strcpy(buf, slime_texts[SIZE(slime_texts) - i - 1L]);
229+#if 0 /*JP*/
221230 if (nolimbs(youmonst.data) && strstri(buf, "limbs"))
222231 (void) strsubst(buf, "limbs", "extremities");
232+#else
233+ if (nolimbs(youmonst.data) && strstri(buf, "手足"))
234+ (void) strsubst(buf, "手足", "先端");
235+#endif
223236
224237 if (index(buf, '%')) {
225238 if (i == 4L) { /* "you are turning green" */
@@ -500,7 +513,10 @@ nh_timeout()
500513 /* must be declining to die in explore|wizard mode;
501514 treat like being cured of strangulation by prayer */
502515 if (uamul && uamul->otyp == AMULET_OF_STRANGULATION) {
516+/*JP
503517 Your("amulet vanishes!");
518+*/
519+ Your("魔除けは消えた!");
504520 useup(uamul);
505521 }
506522 break;
@@ -732,7 +748,7 @@ long timeout;
732748 #if 0 /*JP*/
733749 verbalize("Gleep!"); /* Mything eggs :-) */
734750 #else
735- verbalize("ブォー!"); /* Mything eggs :-) */
751+ verbalize("ブォー!"); /* Mything eggs :-) */
736752 #endif
737753 }
738754 break;
@@ -893,8 +909,13 @@ slip_or_trip()
893909 }
894910 if (!uarmf && otmp->otyp == CORPSE
895911 && touch_petrifies(&mons[otmp->corpsenm]) && !Stone_resistance) {
912+#if 0 /*JP*/
896913 Sprintf(killer.name, "tripping over %s corpse",
897914 an(mons[otmp->corpsenm].mname));
915+#else
916+ Sprintf(killer.name, "%sの死体につまづいて",
917+ mons[otmp->corpsenm].mname);
918+#endif
898919 instapetrify(killer.name);
899920 }
900921 } else if (rn2(3) && is_ice(u.ux, u.uy)) {
--- a/src/topten.c
+++ b/src/topten.c
@@ -2,6 +2,11 @@
22 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
33 /* NetHack may be freely redistributed. See license for details. */
44
5+/* JNetHack Copyright */
6+/* (c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000 */
7+/* For 3.4-, Copyright (c) SHIRAKATA Kentaro, 2002-2016 */
8+/* JNetHack may be freely redistributed. See license for details. */
9+
510 #include "hack.h"
611 #include "dlb.h"
712 #ifdef SHORT_FILENAMES
@@ -856,6 +861,11 @@ boolean so;
856861 #endif
857862 #if 0 /*JP*/
858863 if (!strncmp("escaped", t1->death, 7)) {
864+#else
865+ if (!strncmp("脱出した", jdeath, 8)
866+ || !strncmp("escaped", jdeath, 7)) {
867+#endif
868+#if 0 /*JP*/
859869 Sprintf(eos(linebuf), "escaped the dungeon %s[max level %d]",
860870 !strncmp(" (", t1->death + 7, 2) ? t1->death + 7 + 2 : "",
861871 t1->maxlvl);
@@ -863,42 +873,40 @@ boolean so;
863873 if ((bp = index(linebuf, ')')) != 0)
864874 *bp = (t1->deathdnum == astral_level.dnum) ? '\0' : ' ';
865875 #else
866- if (!strncmp("脱出した", jdeath, 8)
867- || !strncmp("escaped", jdeath, 7)) {
868- char jbuf[BUFSZ];
869- strncpy(jbuf, t1->death, jdeath - t1->death);
870- jbuf[jdeath - t1->death] = '\0';
871- Sprintf(action, "%s迷宮から脱出した[最大地下%d階]",
872- jbuf, t1->maxlvl);
876+ char jbuf[BUFSZ];
877+ strncpy(jbuf, t1->death, jdeath - t1->death);
878+ jbuf[jdeath - t1->death] = '\0';
879+ Sprintf(action, "%s迷宮から脱出した[最大地下%d階]",
880+ jbuf, t1->maxlvl);
873881 #endif
874882 second_line = FALSE;
875883 #if 0 /*JP*/
876884 } else if (!strncmp("ascended", t1->death, 8)) {
877885 #else
878- } else if (!strncmp("昇天した", jdeath, 8)
879- || !strncmp("ascended", jdeath, 8)) {
886+ } else if (!strncmp("昇天した", jdeath, 8)
887+ || !strncmp("ascended", jdeath, 8)) {
880888 #endif
881889 #if 0 /*JP:T*/
882890 Sprintf(eos(linebuf), "ascended to demigod%s-hood",
883891 (t1->plgend[0] == 'F') ? "dess" : "");
884892 #else
885- Sprintf(action, "昇天し%s神となった",
886- (t1->plgend[0] == 'F') ? "女" : "");
893+ Sprintf(action, "昇天し%s神となった",
894+ (t1->plgend[0] == 'F') ? "女" : "");
887895 #endif
888896 second_line = FALSE;
889897 } else {
890898 /*JP
891899 if (!strncmp(t1->death, "quit", 4)) {
892900 */
893- if (!strncmp(jdeath, "抜けた", 4)) {
901+ if (!strncmp(jdeath, "抜けた", 4)) {
894902 #if 0 /*JP*/
895903 Strcat(linebuf, "quit");
896904 #else
897- Strcat(action, t1->death);
905+ Strcat(action, t1->death);
898906 #endif
899907 second_line = FALSE;
900908 #if 1 /*JP*/
901- }
909+ }
902910 #else
903911 } else if (!strncmp(t1->death, "died of st", 10)) {
904912 Strcat(linebuf, "starved to death");
--- a/src/trap.c
+++ b/src/trap.c
@@ -252,7 +252,7 @@ int ef_flags;
252252 /*JP
253253 Your("%s %s not affected.", ostr, vtense(ostr, "are"));
254254 */
255- Your("%sは影響を受けなかった.",ostr);
255+ Your("%sは影響を受けなかった.", ostr);
256256 else if (vismon)
257257 #if 0 /*JP*/
258258 pline("%s %s %s not affected.", s_suffix(Monnam(victim)),
@@ -281,8 +281,12 @@ int ef_flags;
281281 mon_nam(victim), ostr);
282282 #endif
283283 else if (visobj)
284+#if 0 /*JP*/
284285 pline("Somehow, the %s %s not affected.", ostr,
285286 vtense(ostr, "are"));
287+#else
288+ pline("なぜか,%sは影響を受けなかった.", ostr);
289+#endif
286290 }
287291 /* We assume here that if the object is protected because it
288292 * is blessed, it still shows some minor signs of wear, and
@@ -339,12 +343,23 @@ int ef_flags;
339343 return ER_DAMAGED;
340344 } else if (ef_flags & EF_DESTROY) {
341345 if (victim == &youmonst)
346+/*JP
342347 Your("%s %s away!", ostr, vtense(ostr, action[type]));
348+*/
349+ Your("%sは完全に%s!", ostr, action[type]);
343350 else if (vismon)
351+#if 0 /*JP*/
344352 pline("%s %s %s away!", s_suffix(Monnam(victim)), ostr,
345353 vtense(ostr, action[type]));
354+#else
355+ pline("%sの%sは完全に%s!", Monnam(victim), ostr,
356+ action[type]);
357+#endif
346358 else if (visobj)
359+/*JP
347360 pline("The %s %s away!", ostr, vtense(ostr, action[type]));
361+*/
362+ pline("%sは完全に%s!", ostr, action[type]);
348363
349364 if (ef_flags & EF_PAY)
350365 costly_alteration(otmp, cost_type);
@@ -1469,7 +1484,10 @@ unsigned trflags;
14691484 SUPPRESS_SADDLE, FALSE));
14701485 #endif
14711486 } else if (adj_pit) {
1487+/*JP
14721488 You("move into an adjacent pit.");
1489+*/
1490+ You("隣の落し穴に移動した.");
14731491 } else {
14741492 #if 0 /*JP*/
14751493 Strcpy(verbbuf,
@@ -1502,7 +1520,7 @@ unsigned trflags;
15021520 /*JP
15031521 const char *predicament = "on a set of sharp iron spikes";
15041522 */
1505- const char *predicament = "鋭い鉄のトゲトゲの上に落ちた";
1523+ const char *predicament = "鋭い鉄のトゲトゲの上に";
15061524
15071525 if (u.usteed) {
15081526 #if 0 /*JP*/
@@ -1511,16 +1529,16 @@ unsigned trflags;
15111529 SUPPRESS_SADDLE, FALSE)),
15121530 adj_pit ? "steps" : "lands", predicament);
15131531 #else
1514- pline("%sは%s!",
1532+ pline("%sは%s%s!",
15151533 upstart(x_monnam(u.usteed, steed_article, "かわいそうな",
15161534 SUPPRESS_SADDLE, FALSE)),
1517- predicament);
1535+ predicament, adj_pit ? "落ちた" : "降りた");
15181536 #endif
15191537 } else
15201538 #if 0 /*JP*/
15211539 You("%s %s!", adj_pit ? "step" : "land", predicament);
15221540 #else
1523- You("%s!", predicament);
1541+ You("%s%s!", predicament, adj_pit ? "落ちた" : "降りた");
15241542 #endif
15251543 }
15261544 u.utrap = rn1(6, 2);
@@ -3004,7 +3022,7 @@ register struct monst *mtmp;
30043022 /*JP
30053023 fallverb = "falls";
30063024 */
3007- fallverb = "落ちる";
3025+ fallverb = "落ちた";
30083026 if (is_flyer(mptr) || is_floater(mptr)
30093027 || (mtmp->wormno && count_wsegs(mtmp) > 5)
30103028 || is_clinger(mptr)) {
@@ -3024,7 +3042,7 @@ register struct monst *mtmp;
30243042 #if 0 /*JP*/
30253043 fallverb = "is dragged"; /* sokoban pit */
30263044 #else
3027- fallverb = "ずり落ちる"; /* sokoban pit */
3045+ fallverb = "ずり落ちた"; /* sokoban pit */
30283046 #endif
30293047 }
30303048 if (!passes_walls(mptr))
@@ -3035,7 +3053,7 @@ register struct monst *mtmp;
30353053 a_your[trap->madeby_u]);
30363054 #else
30373055 pline("%sは%s落し穴に%s!", Monnam(mtmp),
3038- set_you[trap->madeby_u], jpast(fallverb));
3056+ set_you[trap->madeby_u], fallverb);
30393057 #endif
30403058 if (mptr == &mons[PM_PIT_VIPER]
30413059 || mptr == &mons[PM_PIT_FIEND])
@@ -3569,7 +3587,7 @@ float_up()
35693587 /*JP
35703588 You("gain control over your movements.");
35713589 */
3572- You("うまく歩けるようになった.");
3590+ You("うまく動けるようになった.");
35733591 } else {
35743592 /*JP
35753593 You("start to float in the air!");
@@ -3592,7 +3610,10 @@ float_up()
35923610 }
35933611 }
35943612 if (Flying)
3613+/*JP
35953614 You("are no longer able to control your flight.");
3615+*/
3616+ You("空中でうまく動けなくなった.");
35963617 BFlying |= I_SPECIAL;
35973618 return;
35983619 }
@@ -3638,7 +3659,10 @@ long hmask, emask; /* might cancel timeout */
36383659 /* controlled flight no longer overridden by levitation */
36393660 BFlying &= ~I_SPECIAL;
36403661 if (Flying) {
3662+/*JP
36413663 You("have stopped levitating and are now flying.");
3664+*/
3665+ You("空中浮遊を止めて空を飛びはじめた.");
36423666 return 1;
36433667 }
36443668 }
@@ -3745,12 +3769,22 @@ long hmask, emask; /* might cancel timeout */
37453769 selftouch("落ちながら,あなたは");
37463770 } else if (u.usteed && (is_floater(u.usteed->data)
37473771 || is_flyer(u.usteed->data))) {
3772+/*JP
37483773 You("settle more firmly in the saddle.");
3774+*/
3775+ You("よりしっかりと鞍に納まった.");
37493776 } else if (Hallucination) {
3777+#if 0 /*JP*/
37503778 pline("Bummer! You've %s.",
37513779 is_pool(u.ux, u.uy)
37523780 ? "splashed down"
37533781 : "hit the ground");
3782+#else
3783+ pline("やめてぇ!あなたは%sに叩きつけられた.",
3784+ is_pool(u.ux, u.uy)
3785+ ? "水面"
3786+ : "地面");
3787+#endif
37543788 } else {
37553789 /*JP
37563790 You("float gently to the %s.", surface(u.ux, u.uy));
@@ -3795,7 +3829,10 @@ climb_pit()
37953829
37963830 if (Passes_walls) {
37973831 /* marked as trapped so they can pick things up */
3832+/*JP
37983833 You("ascend from the pit.");
3834+*/
3835+ You("落し穴を上っていった.");
37993836 u.utrap = 0;
38003837 fill_pit(u.ux, u.uy);
38013838 vision_full_recalc = 1; /* vision limits change */
@@ -3803,28 +3840,49 @@ climb_pit()
38033840 Your("%s gets stuck in a crevice.", body_part(LEG));
38043841 display_nhwindow(WIN_MESSAGE, FALSE);
38053842 clear_nhwindow(WIN_MESSAGE);
3843+/*JP
38063844 You("free your %s.", body_part(LEG));
3845+*/
3846+ Your("%sは自由になった.", body_part(LEG));
38073847 } else if ((Flying || is_clinger(youmonst.data)) && !Sokoban) {
38083848 /* eg fell in pit, then poly'd to a flying monster;
38093849 or used '>' to deliberately enter it */
3850+/*JP
38103851 You("%s from the pit.", Flying ? "fly" : "climb");
3852+*/
3853+ You("落し穴から%sいった.", Flying ? "上って" : "登って");
38113854 u.utrap = 0;
38123855 fill_pit(u.ux, u.uy);
38133856 vision_full_recalc = 1; /* vision limits change */
38143857 } else if (!(--u.utrap)) {
3858+#if 0 /*JP*/
38153859 You("%s to the edge of the pit.",
38163860 (Sokoban && Levitation)
38173861 ? "struggle against the air currents and float"
38183862 : u.usteed ? "ride" : "crawl");
3863+#else
3864+ You("%s落し穴の端にたどり着いた.",
3865+ (Sokoban && Levitation)
3866+ ? "空気の流れの中でもがきながら" : "");
3867+#endif
38193868 fill_pit(u.ux, u.uy);
38203869 vision_full_recalc = 1; /* vision limits change */
38213870 } else if (u.dz || flags.verbose) {
38223871 if (u.usteed)
3872+/*JP
38233873 Norep("%s is still in a pit.", upstart(y_monnam(u.usteed)));
3874+*/
3875+ Norep("%sはまだ落し穴の中にいる.", y_monnam(u.usteed));
38243876 else
3877+#if 0 /*JP*/
38253878 Norep((Hallucination && !rn2(5))
38263879 ? "You've fallen, and you can't get up."
38273880 : "You are still in a pit.");
3881+#else
3882+ Norep((Hallucination && !rn2(5))
3883+ ? "あなたは落ち,上がれない."
3884+ : "あなたはまだ落し穴の中にいる.");
3885+#endif
38283886 }
38293887 }
38303888
@@ -4373,7 +4431,7 @@ boolean force;
43734431 : (one ? "Another" : "More"),
43744432 bufp, vtense(bufp, "explode"));
43754433 #else
4376- pline("薬瓶が爆発した!");
4434+ pline("%sは爆発した!", bufp);
43774435 #endif
43784436 if (acid_ctx.ctx_valid) {
43794437 if (obj->dknown)
@@ -4678,9 +4736,11 @@ crawl:
46784736 because lifesaving resets them */
46794737 pool_of_water = waterbody_name(u.ux, u.uy);
46804738 killer.format = KILLED_BY_AN;
4739+#if 0 /*JP*/
46814740 /* avoid "drowned in [a] water" */
46824741 if (!strcmp(pool_of_water, "water"))
46834742 pool_of_water = "deep water", killer.format = KILLED_BY;
4743+#endif
46844744 Strcpy(killer.name, pool_of_water);
46854745 done(DROWNING);
46864746 /* oops, we're still alive. better get out of the water. */
--- a/src/uhitm.c
+++ b/src/uhitm.c
@@ -1514,7 +1514,10 @@ struct obj *otmp;
15141514 #endif
15151515
15161516 /* stealing this corpse is fatal... */
1517+/*JP
15171518 instapetrify(corpse_xname(otmp, "stolen", CXN_ARTICLE));
1519+*/
1520+ instapetrify(corpse_xname(otmp, "盗まれた", CXN_ARTICLE));
15181521 /* apparently wasn't fatal after all... */
15191522 return TRUE;
15201523 }
@@ -2253,8 +2256,14 @@ register struct attack *mattk;
22532256
22542257 if (!type_is_pname(pd))
22552258 mname = an(mname);
2259+/*JP
22562260 You("englut %s.", mon_nam(mdef));
2261+*/
2262+ You("%sを飲み込んだ.", mon_nam(mdef));
2263+/*JP
22572264 Sprintf(kbuf, "swallowing %s whole", mname);
2265+*/
2266+ Sprintf(kbuf, "%sを飲み込んで", mname);
22582267 instapetrify(kbuf);
22592268 } else {
22602269 start_engulf(mdef);
@@ -2478,7 +2487,10 @@ register struct attack *mattk;
24782487 boolean wouldhavehit;
24792488 {
24802489 if (wouldhavehit) /* monk is missing due to penalty for wearing suit */
2490+/*JP
24812491 Your("armor is rather cumbersome...");
2492+*/
2493+ Your("防具は少し邪魔だ...");
24822494
24832495 if (could_seduce(&youmonst, mdef, mattk))
24842496 /*JP
@@ -2920,9 +2932,14 @@ boolean wep_was_destroyed;
29202932 You("%sのにらみで一瞬硬直した!",
29212933 s_suffix(mon_nam(mon)));
29222934 } else if (Hallucination && rn2(4)) {
2935+#if 0 /*JP*/
29232936 pline("%s looks %s%s.", Monnam(mon),
29242937 !rn2(2) ? "" : "rather ",
29252938 !rn2(2) ? "numb" : "stupified");
2939+#else
2940+ pline("%sは%sばかになったようだ.", Monnam(mon),
2941+ !rn2(2) ? "" : "少し");
2942+#endif
29262943 } else {
29272944 /*JP
29282945 You("are frozen by %s gaze!", s_suffix(mon_nam(mon)));
--- a/src/vault.c
+++ b/src/vault.c
@@ -360,9 +360,15 @@ invault()
360360 newsym(guard->mx, guard->my);
361361 if (u.uswallow) {
362362 /* can't interrogate hero, don't interrogate engulfer */
363+/*JP
363364 verbalize("What's going on here?");
365+*/
366+ verbalize("ここで何をしているんだ?");
364367 if (gsensed)
368+/*JP
365369 pline_The("other presence vanishes.");
370+*/
371+ pline("他人の気配は消えた.");
366372 mongone(guard);
367373 return;
368374 }
@@ -651,8 +657,13 @@ register struct monst *grd;
651657 return -1; /* teleported guard - treat as monster */
652658
653659 if (egrd->witness) {
660+#if 0 /*JP*/
654661 verbalize("How dare you %s that gold, scoundrel!",
655662 (egrd->witness & GD_EATGOLD) ? "consume" : "destroy");
663+#else
664+ verbalize("よくもまあ金を%sものだ,悪党め!",
665+ (egrd->witness & GD_EATGOLD) ? "使った" : "壊した");
666+#endif
656667 egrd->witness = 0;
657668 grd->mpeaceful = 0;
658669 return -1;
@@ -968,7 +979,10 @@ newpos:
968979 it and give an inappropriate message */
969980 mpickgold(grd);
970981 if (canspotmon(grd))
982+/*JP
971983 pline("%s picks up some gold.", Monnam(grd));
984+*/
985+ pline("%sは金を拾った.", Monnam(grd));
972986 } else
973987 newsym(grd->mx, grd->my);
974988 restfakecorr(grd);
--- a/src/weapon.c
+++ b/src/weapon.c
@@ -2,17 +2,17 @@
22 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
33 /* NetHack may be freely redistributed. See license for details. */
44
5+/* JNetHack Copyright */
6+/* (c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000 */
7+/* For 3.4-, Copyright (c) SHIRAKATA Kentaro, 2002-2016 */
8+/* JNetHack may be freely redistributed. See license for details. */
9+
510 /*
611 * This module contains code for calculation of "to hit" and damage
712 * bonuses for any given weapon used, as well as weapons selection
813 * code for monsters.
914 */
1015
11-/* JNetHack Copyright */
12-/* (c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000 */
13-/* For 3.4-, Copyright (c) SHIRAKATA Kentaro, 2002-2016 */
14-/* JNetHack may be freely redistributed. See license for details. */
15-
1616 #include "hack.h"
1717
1818 /* Categories whose names don't come from OBJ_NAME(objects[type])
@@ -889,16 +889,32 @@ boolean verbose;
889889 /* new state is only reported if it's an increase */
890890 if (newspe > obj->spe) {
891891 if (verbose) {
892+#if 0 /*JP*/
892893 const char *wetness = (newspe < 3)
893894 ? (!obj->spe ? "damp" : "damper")
894895 : (!obj->spe ? "wet" : "wetter");
896+#else
897+ const char *wetness = (newspe < 3)
898+ ? (!obj->spe ? "湿った" : "さらに湿った")
899+ : (!obj->spe ? "濡れた" : "さらに濡れた");
900+#endif
895901
896902 if (carried(obj))
903+#if 0 /*JP*/
897904 pline("%s gets %s.", Yobjnam2(obj, (const char *) 0),
898905 wetness);
906+#else
907+ pline("%sは%s.", Yobjnam2(obj, (const char *) 0),
908+ wetness);
909+#endif
899910 else if (mcarried(obj) && canseemon(obj->ocarry))
911+#if 0 /*JP*/
900912 pline("%s %s gets %s.", s_suffix(Monnam(obj->ocarry)),
901913 xname(obj), wetness);
914+#else
915+ pline("%s%sは%s.", s_suffix(Monnam(obj->ocarry)),
916+ xname(obj), wetness);
917+#endif
902918 }
903919 }
904920 obj->spe = min(newspe, 7);
@@ -922,11 +938,21 @@ boolean verbose;
922938 if (newspe < obj->spe) {
923939 if (verbose) {
924940 if (carried(obj))
941+#if 0 /*JP*/
925942 pline("%s dries%s.", Yobjnam2(obj, (const char *) 0),
926943 !newspe ? " out" : "");
944+#else
945+ pline("%sは%s.", Yobjnam2(obj, (const char *) 0),
946+ !newspe ? "乾ききった" : "乾いた");
947+#endif
927948 else if (mcarried(obj) && canseemon(obj->ocarry))
949+#if 0 /*JP*/
928950 pline("%s %s drie%s.", s_suffix(Monnam(obj->ocarry)),
929951 xname(obj), !newspe ? " out" : "");
952+#else
953+ pline("%s%sは%s.", s_suffix(Monnam(obj->ocarry)),
954+ xname(obj), !newspe ? "乾ききった" : "乾いた");
955+#endif
930956 }
931957 }
932958 newspe = min(newspe, 7);
--- a/src/were.c
+++ b/src/were.c
@@ -2,8 +2,28 @@
22 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
33 /* NetHack may be freely redistributed. See license for details. */
44
5+/* JNetHack Copyright */
6+/* (c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000 */
7+/* For 3.4-, Copyright (c) SHIRAKATA Kentaro, 2002-2016 */
8+/* JNetHack may be freely redistributed. See license for details. */
9+
510 #include "hack.h"
611
12+#if 1 /*JP*/
13+STATIC_DCL char *FDECL(beastname, (const char *));
14+
15+/*JP 「ジャッカル人間」から「ジャッカル」を取り出す */
16+STATIC_OVL char *
17+beastname(name)
18+const char *name;
19+{
20+ static char werebuf[BUFSZ];
21+ strcpy(werebuf, name);
22+ werebuf[strlen(werebuf) - 4] = '\0';
23+ return werebuf;
24+}
25+#endif
26+
727 void
828 were_change(mon)
929 register struct monst *mon;
@@ -115,7 +135,7 @@ register struct monst *mon;
115135 is_human(&mons[pm]) ? "human" : mons[pm].mname + 4);
116136 #else
117137 pline("%sは%sの姿になった.", Monnam(mon),
118- is_human(&mons[pm]) ? "人間" : mons[pm].mname + 4);
138+ is_human(&mons[pm]) ? "人間" : beastname(mons[pm].mname));
119139 #endif
120140
121141 set_mon_data(mon, &mons[pm], 0);
@@ -204,9 +224,9 @@ you_were()
204224 /* `+4' => skip "were" prefix to get name of beast */
205225 Sprintf(qbuf, "Do you want to change into %s?",
206226 an(mons[u.ulycn].mname + 4));
207-#else /*JP: 日本語ではそこまでしない */
208- Sprintf(qbuf,"%sに変化しますか?",
209- mons[u.ulycn].mname + 4);
227+#else
228+ Sprintf(qbuf, "%sに変化しますか?",
229+ beastname(mons[u.ulycn].mname));
210230 #endif
211231 if (yn(qbuf) == 'n')
212232 return;
--- a/src/wield.c
+++ b/src/wield.c
@@ -238,7 +238,10 @@ struct obj *wep;
238238 if (Race_if(PM_ELF) && !wep->oartifact
239239 && objects[wep->otyp].oc_material == IRON) {
240240 /* Elves are averse to wielding cold iron */
241+/*JP
241242 You("have an uneasy feeling about wielding cold iron.");
243+*/
244+ You("冷たい鉄を装備することに不安な気持になった.");
242245 change_luck(-1);
243246 }
244247 #endif
--- a/src/wizard.c
+++ b/src/wizard.c
@@ -65,17 +65,17 @@ amulet()
6565 /*JP
6666 pline("%s hot!", Tobjnam(amu, "feel"));
6767 */
68- pline("%sは熱く感じた!", xname(amu));
68+ pline("%sは熱く感じた!", xname(amu));
6969 else if (du <= 64)
7070 /*JP
7171 pline("%s very warm.", Tobjnam(amu, "feel"));
7272 */
73- pline("%sはとても暖かく感じた.", xname(amu));
73+ pline("%sはとても暖かく感じた.", xname(amu));
7474 else if (du <= 144)
7575 /*JP
7676 pline("%s warm.", Tobjnam(amu, "feel"));
7777 */
78- pline("%sは暖かく感じた.", xname(amu));
78+ pline("%sは暖かく感じた.", xname(amu));
7979 /* else, the amulet feels normal */
8080 break;
8181 }
--- a/src/worn.c
+++ b/src/worn.c
@@ -627,9 +627,15 @@ outer_break:
627627 distant_name(best,doname));
628628 #endif
629629 if (autocurse)
630+#if 0 /*JP*/
630631 pline("%s %s %s %s for a moment.", s_suffix(Monnam(mon)),
631632 simpleonames(best), otense(best, "glow"),
632633 hcolor(NH_BLACK));
634+#else
635+ pline("%s%sはしばらく%s輝いた.", s_suffix(Monnam(mon)),
636+ simpleonames(best),
637+ jconj_adj(hcolor(NH_BLACK)));
638+#endif
633639 } /* can see it */
634640 m_delay += objects[best->otyp].oc_delay;
635641 mon->mfrozen = m_delay;
--- a/src/write.c
+++ b/src/write.c
@@ -155,7 +155,10 @@ register struct obj *pen;
155155 return 1;
156156 } else if (paper->oclass == SPBOOK_CLASS) {
157157 /* can't write a magic book while blind */
158+/*JP
158159 pline("%s can't create braille text.",
160+*/
161+ pline("%sでは点字を作れない.",
159162 upstart(ysimple_name(pen)));
160163 return 1;
161164 }
@@ -387,7 +390,10 @@ found:
387390 have passed the write-an-unknown scroll test
388391 above we can still fail this one, so it's doubly
389392 hard to write an unknown scroll while blind */
393+/*JP
390394 You("fail to write the scroll correctly and it disappears.");
395+*/
396+ You("巻物に正しく書くのに失敗した.巻物は消えた.");
391397 useup(paper);
392398 obfree(new_obj, (struct obj *) 0);
393399 return 1;
@@ -437,6 +443,7 @@ new_book_description(booktype, outbuf)
437443 int booktype;
438444 char *outbuf;
439445 {
446+#if 0 /*JP*//*日本語では不要*/
440447 /* subset of description strings from objects.c; if it grows
441448 much, we may need to add a new flag field to objects[] instead */
442449 static const char *const compositions[] = {
@@ -457,6 +464,9 @@ char *outbuf;
457464 break;
458465
459466 Sprintf(outbuf, "%s%s", *comp_p ? "into " : "", descr);
467+#else /*JP:単純にコピー*/
468+ Strcpy(outbuf, OBJ_DESCR(objects[booktype]));
469+#endif
460470 return outbuf;
461471 }
462472