• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

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

patch投げ用


Commit MetaInfo

Revision46ee79aa41961ee68420e7aa954646fa56904573 (tree)
Time2016-04-03 03:15:24
AuthorSHIRAKATA Kentaro <argrath@ub32...>
CommiterSHIRAKATA Kentaro

Log Message

add translation

Change Summary

Incremental Difference

--- a/src/cmd.c
+++ b/src/cmd.c
@@ -2636,7 +2636,7 @@ int final;
26362636 /*JP
26372637 you_have("infravision", from_what(INFRAVISION));
26382638 */
2639- you_have("暗闇で物を見る能力", from_what(INFRAVISION));
2639+ you_have("赤外線が見える視覚", from_what(INFRAVISION));
26402640 if (Detect_monsters)
26412641 /*JP
26422642 you_are("sensing the presence of monsters", "");
--- a/src/invent.c
+++ b/src/invent.c
@@ -779,6 +779,7 @@ register int type;
779779 * http://concord.wikia.com/wiki/List_of_Fictional_Currencies
780780 */
781781 static const char *const currencies[] = {
782+#if 0 /*JP*/
782783 "Altarian Dollar", /* The Hitchhiker's Guide to the Galaxy */
783784 "Ankh-Morpork Dollar", /* Discworld */
784785 "auric", /* The Domination of Draka */
@@ -800,6 +801,29 @@ static const char *const currencies[] = {
800801 "Triganic Pu", /* The Hitchhiker's Guide to the Galaxy */
801802 "woolong", /* Cowboy Bebop */
802803 "zorkmid", /* Zork, NetHack */
804+#else
805+ "アルタイル・ドル", /* The Hitchhiker's Guide to the Galaxy */
806+ "アンクモルポーク・ドル", /* Discworld */
807+ "ユーリック", /* The Domination of Draka */
808+ "バッカゾイド", /* Space Quest */
809+ "サーボゾイド", /* Starslip */
810+ "クレジット・チット", /* Deus Ex */
811+ "キュービット", /* Battlestar Galactica */
812+ "フレニアン・ピッブル・ビード", /* The Hitchhiker's Guide to the Galaxy */
813+ "フレッツァ", /* Jules Verne */
814+ "帝国クレジット", /* Star Wars */
815+ "香港月ドル", /* The Moon is a Harsh Mistress */
816+ "コンバック", /* Snow Crash */
817+ "ナーナイト", /* System Shock 2 */
818+ "クァトロ", /* Star Trek, Sim City */
819+ "シモレオン", /* Sim City */
820+ "ソラリ", /* Spaceballs */
821+ "スペースバック", /* Spaceballs */
822+ "スポアバック", /* Spore */
823+ "トライガニック・プー", /* The Hitchhiker's Guide to the Galaxy */
824+ "ウーロン", /* Cowboy Bebop */
825+ "ゴールド", /* Zork, NetHack */
826+#endif
803827 };
804828
805829 const char *
@@ -1250,8 +1274,12 @@ register const char *let, *word;
12501274 bp = (rn2(2) ? buf : (bp + 4));
12511275 } else
12521276 bp = buf;
1277+#if 0 /*JP*/
12531278 You("mime %s something%s%s.", ing_suffix(bp), suf ? " " : "",
12541279 suf ? suf : "");
1280+#else
1281+ You("何かを%sふりをした.", bp);
1282+#endif
12551283 }
12561284 return (allownone ? &zeroobj : (struct obj *) 0);
12571285 }
@@ -1497,12 +1525,12 @@ static NEARDATA const char removeables[] = { ARMOR_CLASS, WEAPON_CLASS,
14971525 /* interactive version of getobj - used for Drop, Identify and */
14981526 /* Takeoff (A). Return the number of times fn was called successfully */
14991527 /* If combo is TRUE, we just use this to get a category list */
1500-/*JP CHECK: 3.4.3 の呼び出し元
1501-do.c:864: (result = ggetobj("drop", drop, 0, FALSE, (unsigned *)0)) < -1)
1502-do.c:925: i = ggetobj("drop", drop, 0, TRUE, &ggoresults);
1503-do_wear.c:2538: (result = ggetobj("take off", select_off, 0, FALSE, (unsigned *)0)) < -1)
1504-do_wear.c:2586: if (ggetobj("take off", select_off, 0, TRUE, (unsigned *)0) == -2)
1505-invent.c:1782: n = ggetobj("identify", identify, id_limit, FALSE, (unsigned *)0);
1528+/*JP CHECK: 3.6.0 の呼び出し元
1529+do.c:962: || (result = ggetobj("drop", drop, 0, FALSE, (unsigned *) 0)) < -1)
1530+do.c:1009: i = ggetobj("drop", drop, 0, TRUE, &ggoresults);
1531+do_wear.c:2955: || (result = ggetobj("take off", select_off, 0, FALSE,
1532+do_wear.c:3007: if (ggetobj("take off", select_off, 0, TRUE, (unsigned *) 0) == -2)
1533+invent.c:2014: n = ggetobj("identify", identify, id_limit, FALSE,
15061534 */
15071535 int
15081536 ggetobj(word, fn, mx, combo, resultflags)
@@ -1717,10 +1745,9 @@ unsigned *resultflags;
17171745 * If allflag then no questions are asked. Max gives the max nr of
17181746 * objects to be treated. Return the number of objects treated.
17191747 */
1720-/*JP CHECK: 3.4.3 での呼び出し元
1721-invent.c:1512:ggetobj() int cnt = askchain(&invent, olets, allflag, fn, ckfn, mx, word);
1722-pickup.c:2615:("nodot") if (askchain((struct obj **)&current_container->cobj,
1723-pickup.c:2711:("nodot") (void) askchain((struct obj **)&invent,
1748+/*JP CHECK: 3.6.0 での呼び出し元
1749+invent.c:1728: int cnt = askchain(&invent, olets, allflag, fn, ckfn, mx, word);
1750+pickup.c:2882: if (askchain(objlist, (one_by_one ? (char *) 0 : selection), allflag,
17241751 wordには動詞が英語で入る。
17251752 */
17261753 int
@@ -1939,7 +1966,10 @@ int id_limit;
19391966 pline1(thats_enough_tries);
19401967 break;
19411968 } else { /* try again */
1969+/*JP
19421970 pline("Choose an item; use ESC to decline.");
1971+*/
1972+ pline("アイテムを選んでください;やめるならESC.");
19431973 }
19441974 }
19451975 }
@@ -2747,17 +2777,30 @@ dotypeinv()
27472777
27482778 switch (c) {
27492779 case 'B':
2780+/*JP
27502781 which = "known to be blessed";
2782+*/
2783+ which = "祝福されているとわかっている";
27512784 break;
27522785 case 'U':
2786+/*JP
27532787 which = "known to be uncursed";
2788+*/
2789+ which = "呪われていないとわかっている";
27542790 break;
27552791 case 'C':
2792+/*JP
27562793 which = "known to be cursed";
2794+*/
2795+ which = "呪われているとわかっている";
27572796 break;
27582797 case 'X':
2798+#if 0 /*JP*/
27592799 You(
27602800 "have no objects whose blessed/uncursed/cursed status is unknown.");
2801+#else
2802+ You("祝福/呪いがわからないものは何ももっていない.");
2803+#endif
27612804 break; /* better phrasing is desirable */
27622805 default:
27632806 /*JP
@@ -3037,7 +3080,10 @@ boolean picked_some;
30373080 pline1(fbuf);
30383081 read_engr_at(u.ux, u.uy); /* Eric Backus */
30393082 if (obj_cnt == 1 && otmp->quan == 1L)
3083+/*JP
30403084 There("is %s object here.", picked_some ? "another" : "an");
3085+*/
3086+ There("ここには%s一つものがある.", picked_some ? "もう" : "");
30413087 else
30423088 #if 0 /*JP*/
30433089 There("are %s%s objects here.",
@@ -3056,6 +3102,7 @@ boolean picked_some;
30563102 #endif
30573103 for (; otmp; otmp = otmp->nexthere)
30583104 if (otmp->otyp == CORPSE && will_feel_cockatrice(otmp, FALSE)) {
3105+#if 0 /*JP*//*"It's (corpse_name), unfortunately"*/
30593106 pline("%s %s%s.",
30603107 (obj_cnt > 1)
30613108 ? "Including"
@@ -3066,6 +3113,16 @@ boolean picked_some;
30663113 poly_when_stoned(youmonst.data)
30673114 ? ""
30683115 : ", unfortunately");
3116+#else
3117+ pline("%s%s%s.",
3118+ poly_when_stoned(youmonst.data)
3119+ ? ""
3120+ : "残念ながら",
3121+ corpse_xname(otmp, (const char *) 0, CXN_ARTICLE),
3122+ (obj_cnt > 1)
3123+ ? "を含んでいる"
3124+ : "だ");
3125+#endif
30693126 feel_cockatrice(otmp, FALSE);
30703127 break;
30713128 }
@@ -3103,7 +3160,10 @@ boolean picked_some;
31033160 for (; otmp; otmp = otmp->nexthere) {
31043161 if (otmp->otyp == CORPSE && will_feel_cockatrice(otmp, FALSE)) {
31053162 felt_cockatrice = TRUE;
3163+/*JP
31063164 Sprintf(buf, "%s...", doname(otmp));
3165+*/
3166+ Sprintf(buf, "%s...", doname(otmp));
31073167 putstr(tmpwin, 0, buf);
31083168 break;
31093169 }
@@ -3649,7 +3709,10 @@ doorganize() /* inventory organizer by Del Lamb */
36493709 const char *adj_type;
36503710
36513711 if (!invent) {
3712+/*JP
36523713 You("aren't carrying anything to adjust.");
3714+*/
3715+ You("順序を変えるものを何も持っていない.");
36533716 return 0;
36543717 }
36553718
@@ -3801,7 +3864,10 @@ doorganize() /* inventory organizer by Del Lamb */
38013864 } else if (inv_cnt(FALSE) >= 52) {
38023865 (void) merged(&splitting, &obj); /* undo split */
38033866 /* "knapsack cannot accommodate any more items" */
3867+/*JP
38043868 Your("pack is too full.");
3869+*/
3870+ Your("持ち物は一杯だ.");
38053871 return 0;
38063872 } else {
38073873 bumped = otmp;
@@ -3833,7 +3899,10 @@ doorganize() /* inventory organizer by Del Lamb */
38333899 /* messages deferred until inventory has been fully reestablished */
38343900 prinv(adj_type, obj, 0L);
38353901 if (bumped)
3902+/*JP
38363903 prinv("Moving:", bumped, 0L);
3904+*/
3905+ prinv("移動:", bumped, 0L);
38373906 if (splitting)
38383907 clear_splitobjs(); /* reset splitobj context */
38393908 update_inventory();
--- a/src/light.c
+++ b/src/light.c
@@ -2,6 +2,10 @@
22 /* Copyright (c) Dean Luick, 1994 */
33 /* NetHack may be freely redistributed. See license for details. */
44
5+/* JNetHack Copyright */
6+/* For 3.6-, Copyright (c) SHIRAKATA Kentaro, 2002-2016 */
7+/* JNetHack may be freely redistributed. See license for details. */
8+
59 #include "hack.h"
610 #include "lev.h" /* for checking save modes */
711
--- a/src/lock.c
+++ b/src/lock.c
@@ -355,8 +355,13 @@ struct obj *pick;
355355 You("%sをつかむことができない!手がないんだもの!", xname(pick));
356356 return PICKLOCK_DID_NOTHING;
357357 } else if (u.uswallow) {
358+#if 0 /*JP*/
358359 You_cant("%sunlock %s.", (picktyp == CREDIT_CARD) ? "" : "lock or ",
359360 mon_nam(u.ustuck));
361+#else
362+ You_cant("%sを%sない.", mon_nam(u.ustuck),
363+ (picktyp == CREDIT_CARD) ? "開けられ" : "開け閉めでき");
364+#endif
360365 return PICKLOCK_DID_NOTHING;
361366 }
362367
@@ -626,7 +631,10 @@ doforce()
626631 char qbuf[QBUFSZ];
627632
628633 if (u.uswallow) {
634+/*JP
629635 You_cant("force anything from inside here.");
636+*/
637+ You_cant("内側からこじ開けることはできない.");
630638 return 0;
631639 }
632640 if (!uwep /* proper type test */
--- a/src/mail.c
+++ b/src/mail.c
@@ -474,12 +474,30 @@ struct obj *otmp;
474474 #ifdef AMIGA
475475 "Only Amiga makes it possible.", "CATS have all the answers.",
476476 #endif
477+/*JP
477478 "This mail complies with the Yendorian Anti-Spam Act (YASA)",
479+*/
480+ "このメールはイェンダースパム対策法(YASA)に準拠しています.",
481+/*JP
478482 "Please find enclosed a small token to represent your Owlbear",
483+*/
484+ "あなたのアウルベアを表現するために同封した小さいトークンを探してください",
485+/*JP
479486 "**FR33 P0T10N 0F FULL H34L1NG**",
487+*/
488+ "**完全回復の薬プレゼント**",
489+/*JP
480490 "Please return to sender (Asmodeus)",
491+*/
492+ "送信者(アスモデウス)に送り返してください",
493+/*JP
481494 "Buy a potion of gain level for only $19.99! Guaranteed to be blessed!",
495+*/
496+ "レベルアップの薬がたったの1980円!祝福保証!",
497+/*JP
482498 "Invitation: Visit the NetHack web site at http://www.nethack.org!"
499+*/
500+ "招待状: NetHack ウェブサイト http://www.nethack.org に来てね!"
483501 };
484502
485503 /* XXX replace with more general substitution code and add local
--- a/src/makemon.c
+++ b/src/makemon.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
712 #include <ctype.h>
@@ -2118,7 +2123,10 @@ int *seencount; /* secondary output */
21182123 impossible("bad bag o' tricks");
21192124 } else if (bag->spe < 1) {
21202125 /* if tipping known empty bag, give normal empty container message */
2126+/*JP
21212127 pline1((tipping && bag->cknown) ? "It's empty." : nothing_happens);
2128+*/
2129+ pline1((tipping && bag->cknown) ? "それは空だ." : nothing_happens);
21222130 /* now known to be empty if sufficiently discovered */
21232131 if (bag->dknown && objects[bag->otyp].oc_name_known)
21242132 bag->cknown = 1;
@@ -2144,7 +2152,10 @@ int *seencount; /* secondary output */
21442152 if (bag->dknown)
21452153 makeknown(BAG_OF_TRICKS);
21462154 } else if (!tipping) {
2155+/*JP
21472156 pline1(!moncount ? nothing_happens : "Nothing seems to happen.");
2157+*/
2158+ pline1(!moncount ? nothing_happens : "何も起きなかったようだ.");
21482159 }
21492160 }
21502161 return moncount;
--- a/src/mcastu.c
+++ b/src/mcastu.c
@@ -759,20 +759,34 @@ int spellnum;
759759 fmt = 0;
760760 if (!seecaster) {
761761 char *arg; /* [not const: upstart(N==1 ? an() : makeplural())] */
762+/*JP
762763 const char *what = (let == S_SNAKE) ? "snake" : "insect";
764+*/
765+ const char *what = (let == S_SNAKE) ? "ヘビ" : "虫";
763766
764767 if (newseen <= oldseen || Unaware) {
765768 /* unseen caster fails or summons unseen critters,
766769 or unconscious hero ("You dream that you hear...") */
770+/*JP
767771 You_hear("someone summoning %s.", makeplural(what));
772+*/
773+ You_hear("誰かが%sを召喚しているのを聞いた.", what);
768774 } else {
769775 /* unseen caster summoned seen critter(s) */
770776 arg = (newseen == oldseen + 1) ? an(what) : makeplural(what);
771777 if (!Deaf)
778+#if 0 /*JP*/
772779 You_hear("someone summoning something, and %s %s.", arg,
773780 vtense(arg, "appear"));
781+#else
782+ You_hear("誰かが何かを召喚するのを聞いた,そして%sが現れた.",
783+ arg);
784+#endif
774785 else
786+/*JP
775787 pline("%s %s.", upstart(arg), vtense(arg, "appear"));
788+*/
789+ pline("%sが現れた.", arg);
776790 }
777791
778792 /* seen caster, possibly producing unseen--or just one--critters;
--- a/src/mhitm.c
+++ b/src/mhitm.c
@@ -119,7 +119,7 @@ struct attack *mattk;
119119 fmt = (could_seduce(magr, mdef, mattk) && !magr->mcan)
120120 ? "%s pretends to be friendly to"
121121 : "%s misses";
122-#else
122+#else /*JP:英語と変数展開のタイミングが異なるので注意*/
123123 fmt = (could_seduce(magr,mdef,mattk) && !magr->mcan)
124124 ? "%sは%%sに友好的なふりをした."
125125 : "%sの%%sへの攻撃は外れた.";
@@ -276,12 +276,18 @@ boolean quietly;
276276 return MM_HIT; /* no damage during the polymorph */
277277 }
278278 if (!quietly && canspotmon(magr))
279+/*JP
279280 pline("%s turns to stone!", Monnam(magr));
281+*/
282+ pline("%sは石になった!", Monnam(magr));
280283 monstone(magr);
281284 if (magr->mhp > 0)
282285 return MM_HIT; /* lifesaved */
283286 else if (magr->mtame && !vis)
287+/*JP
284288 You(brief_feeling, "peculiarly sad");
289+*/
290+ You(brief_feeling, "もの悲しい");
285291 return MM_AGR_DIED;
286292 }
287293 }
@@ -291,8 +297,12 @@ boolean quietly;
291297 place_monster(magr, tx, ty); /* put down at target spot */
292298 place_monster(mdef, fx, fy);
293299 if (vis && !quietly)
300+#if 0 /*JP*/
294301 pline("%s moves %s out of %s way!", Monnam(magr), mon_nam(mdef),
295302 is_rider(pa) ? "the" : mhis(magr));
303+#else
304+ pline("%sは%sを押しのけた!", Monnam(magr), mon_nam(mdef));
305+#endif
296306 newsym(fx, fy); /* see it */
297307 newsym(tx, ty); /* all happen */
298308 flush_screen(0); /* make sure it shows up */
@@ -626,7 +636,7 @@ struct attack *mattk;
626636 Sprintf(buf, "%s gazes at", Monnam(magr));
627637 pline("%s %s...", buf, mon_nam(mdef));
628638 #else
629- Sprintf(buf,"%sは%%sをにらみつけた...", Monnam(magr));
639+ Sprintf(buf, "%sは%%sをにらみつけた...", Monnam(magr));
630640 pline(buf, mon_nam(mdef));
631641 #endif
632642 }
@@ -737,7 +747,7 @@ register struct attack *mattk;
737747 Sprintf(buf, "%s swallows", Monnam(magr));
738748 pline("%s %s.", buf, mon_nam(mdef));
739749 #else
740- Sprintf(buf,"%sは%%sをぐっと飲みこんだ.", Monnam(magr));
750+ Sprintf(buf, "%sは%%sをぐっと飲みこんだ.", Monnam(magr));
741751 pline(buf, mon_nam(mdef));
742752 #endif
743753 }
@@ -1100,13 +1110,14 @@ register struct attack *mattk;
11001110 Monnam(mdef));
11011111 tmp = 0;
11021112 } else if (vis) {
1103-#if 0 /*JP*/
1113+/*JP
11041114 pline("%s is covered in acid!", Monnam(mdef));
1105- pline("It burns %s!", mon_nam(mdef));
1106-#else
1115+*/
11071116 pline("%sは酸につつまれた!", Monnam(mdef));
1117+/*JP
1118+ pline("It burns %s!", mon_nam(mdef));
1119+*/
11081120 pline("%sは焼かれた!", mon_nam(mdef));
1109-#endif
11101121 }
11111122 if (!rn2(30))
11121123 erode_armor(mdef, ERODE_CORRODE);
@@ -1888,7 +1899,10 @@ boolean givemsg;
18881899 || attacktype(mon->data, AT_BREA))) {
18891900 mon->mspec_used += d(2, 2);
18901901 if (givemsg)
1902+/*JP
18911903 pline("%s seems lethargic.", Monnam(mon));
1904+*/
1905+ pline("%sは無気力になったようだ.", Monnam(mon));
18921906 }
18931907 }
18941908
--- a/src/mhitu.c
+++ b/src/mhitu.c
@@ -503,7 +503,10 @@ register struct monst *mtmp;
503503 so mtmp's next move will be a regular attack */
504504 place_monster(mtmp, mtmp->mx, mtmp->my); /* put back */
505505 newsym(u.ux, u.uy); /* u.uundetected was toggled */
506+/*JP
506507 pline("%s draws back as you drop!", Monnam(mtmp));
508+*/
509+ pline("あなたが落ちることで%sは引き戻された!", Monnam(mtmp));
507510 return 0;
508511 }
509512
@@ -717,7 +720,10 @@ register struct monst *mtmp;
717720 int numseen, numhelp;
718721 char buf[BUFSZ], genericwere[BUFSZ];
719722
723+/*JP
720724 Strcpy(genericwere, "creature");
725+*/
726+ Strcpy(genericwere, "何か");
721727 numhelp = were_summon(mdat, FALSE, &numseen, genericwere);
722728 if (youseeit) {
723729 /*JP
@@ -765,10 +771,7 @@ register struct monst *mtmp;
765771 pline("%s%s!", upstart(buf), from_nowhere);
766772 #else
767773 pline("%sが%s現れた!",
768- strcmp(genericwere, "creature")
769- ? genericwere
770- : "何か",
771- from_nowhere);
774+ genericwere, from_nowhere);
772775 #endif
773776 }
774777 } /* else no help came; but you didn't know it tried */
--- a/src/mkobj.c
+++ b/src/mkobj.c
@@ -631,9 +631,15 @@ register struct obj *otmp;
631631
632632 /* alteration types; must match COST_xxx macros in hack.h */
633633 static const char *const alteration_verbs[] = {
634+#if 0 /*JP*/
634635 "cancel", "drain", "uncharge", "unbless", "uncurse", "disenchant",
635636 "degrade", "dilute", "erase", "burn", "neutralize", "destroy", "splatter",
636637 "bite", "open", "break the lock on", "rust", "rot", "tarnish"
638+#else
639+ "無効化した", "劣化させた", "放出させた", "祝福を解いた", "呪いを解いた", "魔力を減らした",
640+ "劣化させた", "薄めた", "消した", "燃やした", "無毒化した", "壊した", "使った",
641+ "食べた", "開けた", "鍵を壊した", "錆びさせた", "腐らせた", "傷つけた"
642+#endif
637643 };
638644
639645 /* possibly bill for an object which the player has just modified */
@@ -645,7 +651,9 @@ int alter_type;
645651 xchar ox, oy;
646652 char objroom;
647653 boolean set_bknown;
654+#if 0 /*JP*//*使わない*/
648655 const char *those, *them;
656+#endif
649657 struct monst *shkp = 0;
650658
651659 if (alter_type < 0 || alter_type >= SIZE(alteration_verbs)) {
@@ -676,10 +684,12 @@ int alter_type;
676684 return;
677685 }
678686
687+#if 0 /*JP*//*日本語では不要*/
679688 if (obj->quan == 1L)
680689 those = "that", them = "it";
681690 else
682691 those = "those", them = "them";
692+#endif
683693
684694 /* when shopkeeper describes the object as being uncursed or unblessed
685695 hero will know that it is now uncursed; will also make the feedback
@@ -691,17 +701,27 @@ int alter_type;
691701 case OBJ_INVENT:
692702 if (set_bknown)
693703 obj->bknown = 1;
704+#if 0 /*JP*/
694705 verbalize("You %s %s %s, you pay for %s!",
695706 alteration_verbs[alter_type], those, simpleonames(obj),
696707 them);
708+#else
709+ verbalize("%sを%sのなら,買ってもらうよ!",
710+ simpleonames(obj), alteration_verbs[alter_type]);
711+#endif
697712 bill_dummy_object(obj);
698713 break;
699714 case OBJ_FLOOR:
700715 if (set_bknown)
701716 obj->bknown = 1;
702717 if (costly_spot(u.ux, u.uy) && objroom == *u.ushops) {
718+#if 0 /*JP*/
703719 verbalize("You %s %s, you pay for %s!",
704720 alteration_verbs[alter_type], those, them);
721+#else
722+ verbalize("%sのなら,買ってもらうよ!",
723+ alteration_verbs[alter_type]);
724+#endif
705725 bill_dummy_object(obj);
706726 } else {
707727 (void) stolen_value(obj, ox, oy, FALSE, FALSE);
@@ -2096,15 +2116,24 @@ boolean tipping; /* caller emptying entire contents; affects shop handling */
20962116 do {
20972117 obj->otyp = rnd_class(POT_BOOZE, POT_WATER);
20982118 } while (obj->otyp == POT_SICKNESS);
2119+/*JP
20992120 what = (obj->quan > 1L) ? "Some potions" : "A potion";
2121+*/
2122+ what = "薬";
21002123 } else {
21012124 obj = mkobj(FOOD_CLASS, FALSE);
21022125 if (obj->otyp == FOOD_RATION && !rn2(7))
21032126 obj->otyp = LUMP_OF_ROYAL_JELLY;
2127+/*JP
21042128 what = "Some food";
2129+*/
2130+ what = "食べ物";
21052131 }
21062132 ++objcount;
2133+/*JP
21072134 pline("%s %s out.", what, vtense(what, "spill"));
2135+*/
2136+ pline("%sが飛び出てきた.", what);
21082137 obj->blessed = horn->blessed;
21092138 obj->cursed = horn->cursed;
21102139 obj->owt = weight(obj);
@@ -2116,6 +2145,7 @@ boolean tipping; /* caller emptying entire contents; affects shop handling */
21162145 being included in its formatted name during next message */
21172146 iflags.suppress_price++;
21182147 if (!tipping) {
2148+#if 0 /*JP*/
21192149 obj = hold_another_object(
21202150 obj, u.uswallow ? "Oops! %s out of your reach!"
21212151 : (Is_airlevel(&u.uz) || Is_waterlevel(&u.uz)
@@ -2124,6 +2154,16 @@ boolean tipping; /* caller emptying entire contents; affects shop handling */
21242154 ? "Oops! %s away from you!"
21252155 : "Oops! %s to the floor!",
21262156 The(aobjnam(obj, "slip")), (const char *) 0);
2157+#else
2158+ obj = hold_another_object(
2159+ obj, u.uswallow ? "おっと!%sは届かない!"
2160+ : (Is_airlevel(&u.uz) || Is_waterlevel(&u.uz)
2161+ || levl[u.ux][u.uy].typ < IRONBARS
2162+ || levl[u.ux][u.uy].typ >= ICE)
2163+ ? "おっと!%sはあなたの手から滑り落ちた!"
2164+ : "おっと!%sは床に滑り落ちた!",
2165+ xname(obj), (const char *)0);
2166+#endif
21272167 } else {
21282168 /* assumes this is taking place at hero's location */
21292169 if (!can_reach_floor(TRUE)) {
@@ -2132,8 +2172,13 @@ boolean tipping; /* caller emptying entire contents; affects shop handling */
21322172 if (IS_ALTAR(levl[u.ux][u.uy].typ))
21332173 doaltarobj(obj); /* does its own drop message */
21342174 else
2175+#if 0 /*JP*/
21352176 pline("%s %s to the %s.", Doname2(obj),
21362177 otense(obj, "drop"), surface(u.ux, u.uy));
2178+#else
2179+ pline("%sは%sに落ちた.", Doname2(obj),
2180+ surface(u.ux, u.uy));
2181+#endif
21372182 dropy(obj);
21382183 }
21392184 }
--- a/src/mon.c
+++ b/src/mon.c
@@ -1779,11 +1779,11 @@ struct monst *mtmp;
17791779 /*JP
17801780 pline("But wait...");
17811781 */
1782- pline("しかし...");
1782+ pline("ちょっとまった...");
17831783 /*JP
17841784 pline("%s medallion begins to glow!", s_suffix(Monnam(mtmp)));
17851785 */
1786- pline("%sのメダリオンが輝きはじめた!", Monnam(mtmp));
1786+ pline("%sの魔除けが輝きはじめた!", Monnam(mtmp));
17871787 makeknown(AMULET_OF_LIFE_SAVING);
17881788 /* amulet is visible, but monster might not be */
17891789 if (canseemon(mtmp)) {
@@ -1802,7 +1802,7 @@ struct monst *mtmp;
18021802 /*JP
18031803 pline_The("medallion crumbles to dust!");
18041804 */
1805- pline_The("メダリオンはこなごなにくだけてしまった!");
1805+ pline("魔除けはこなごなにくだけた!");
18061806 }
18071807 m_useup(mtmp, lifesave);
18081808
@@ -1854,6 +1854,7 @@ register struct monst *mtmp;
18541854 || amorphous(mtmp->data));
18551855
18561856 /* construct a format string before transformation */
1857+#if 0 /*JP*/
18571858 Sprintf(buf, "The %s%s suddenly %s and rises as %%s!",
18581859 spec_mon ? "" : "seemingly dead ",
18591860 x_monnam(mtmp, ARTICLE_NONE, (char *) 0,
@@ -1861,6 +1862,15 @@ register struct monst *mtmp;
18611862 | SUPPRESS_INVISIBLE | SUPPRESS_IT,
18621863 FALSE),
18631864 spec_mon ? "reconstitutes" : "transforms");
1865+#else
1866+ Sprintf(buf, "%s%sは突然%s,%%sとして蘇った!",
1867+ spec_mon ? "" : "死んだように思われた",
1868+ x_monnam(mtmp, ARTICLE_NONE, (char *) 0,
1869+ SUPPRESS_SADDLE | SUPPRESS_HALLUCINATION
1870+ | SUPPRESS_INVISIBLE | SUPPRESS_IT,
1871+ FALSE),
1872+ spec_mon ? "再構成され" : "変化し");
1873+#endif
18641874 mtmp->mcanmove = 1;
18651875 mtmp->mfrozen = 0;
18661876 if (mtmp->mhpmax <= 0)
@@ -2373,7 +2383,11 @@ int dest; /* dest==1, normal; dest==0, don't print message; dest==2, don't
23732383 /* oc_big is also oc_bimanual and oc_bulky */
23742384 && (otmp->owt > 30 || objects[otyp].oc_big)) {
23752385 delobj(otmp);
2386+#if 0 /*JP*/
23762387 } else if (!flooreffects(otmp, x, y, (dest & 1) ? "fall" : "")) {
2388+#else
2389+ } else if (!flooreffects(otmp, x, y, (dest & 1) ? "落ちる" : "")) {
2390+#endif
23772391 place_object(otmp, x, y);
23782392 stackobj(otmp);
23792393 }
@@ -2384,7 +2398,10 @@ int dest; /* dest==1, normal; dest==0, don't print message; dest==2, don't
23842398 : CORPSTAT_NONE);
23852399 if (burycorpse && cadaver && cansee(x, y) && !mtmp->minvis
23862400 && cadaver->where == OBJ_BURIED && (dest & 1)) {
2401+/*JP
23872402 pline("%s corpse ends up buried.", s_suffix(Monnam(mtmp)));
2403+*/
2404+ pline("%sの死体は埋まってしまった.", s_suffix(Monnam(mtmp)));
23882405 }
23892406 }
23902407 }
@@ -2525,8 +2542,12 @@ struct monst *mtmp;
25252542 if (!in_mklev && (mtmp->mstrategy & STRAT_APPEARMSG)) {
25262543 mtmp->mstrategy &= ~STRAT_APPEARMSG; /* one chance only */
25272544 if (!couldspot && canspotmon(mtmp))
2545+#if 0 /*JP*/
25282546 pline("%s suddenly %s!", Amonnam(mtmp),
25292547 !Blind ? "appears" : "arrives");
2548+#else
2549+ pline("突然%sが現れた!", Amonnam(mtmp));
2550+#endif
25302551 }
25312552 return;
25322553 }
@@ -3790,14 +3811,20 @@ struct permonst *mdat;
37903811 switch (mndx) {
37913812 case PM_ROTHE:
37923813 case PM_MINOTAUR:
3814+/*JP
37933815 You("notice a bovine smell.");
3816+*/
3817+ You("牛のようなにおいに気付いた.");
37943818 msg_given = TRUE;
37953819 break;
37963820 case PM_CAVEMAN:
37973821 case PM_CAVEWOMAN:
37983822 case PM_BARBARIAN:
37993823 case PM_NEANDERTHAL:
3824+/*JP
38003825 You("smell body odor.");
3826+*/
3827+ pline("体臭のようなにおいがした.");
38013828 msg_given = TRUE;
38023829 break;
38033830 /*
@@ -3820,7 +3847,10 @@ struct permonst *mdat;
38203847 case PM_WERERAT:
38213848 case PM_WEREWOLF:
38223849 case PM_OWLBEAR:
3850+/*JP
38233851 You("detect an odor reminiscent of an animal's den.");
3852+*/
3853+ pline("動物のねぐらを思い出すようなにおいがした.");
38243854 msg_given = TRUE;
38253855 break;
38263856 /*
@@ -3828,16 +3858,25 @@ struct permonst *mdat;
38283858 break;
38293859 */
38303860 case PM_STEAM_VORTEX:
3861+/*JP
38313862 You("smell steam.");
3863+*/
3864+ pline("蒸気のにおいがした.");
38323865 msg_given = TRUE;
38333866 break;
38343867 case PM_GREEN_SLIME:
3868+/*JP
38353869 pline("%s stinks.", Something);
3870+*/
3871+ pline("悪臭がした.");
38363872 msg_given = TRUE;
38373873 break;
38383874 case PM_VIOLET_FUNGUS:
38393875 case PM_SHRIEKER:
3876+/*JP
38403877 You("smell mushrooms.");
3878+*/
3879+ pline("きのこのにおいがした.");
38413880 msg_given = TRUE;
38423881 break;
38433882 /* These are here to avoid triggering the
@@ -3855,35 +3894,61 @@ struct permonst *mdat;
38553894 if (nonspecific)
38563895 switch (mdat->mlet) {
38573896 case S_DOG:
3897+/*JP
38583898 You("notice a dog smell.");
3899+*/
3900+ You("犬のにおいに気付いた.");
38593901 msg_given = TRUE;
38603902 break;
38613903 case S_DRAGON:
3904+/*JP
38623905 You("smell a dragon!");
3906+*/
3907+ pline("ドラゴンのにおいがする!");
38633908 msg_given = TRUE;
38643909 break;
38653910 case S_FUNGUS:
3911+/*JP
38663912 pline("%s smells moldy.", Something);
3913+*/
3914+ pline("何か苔のようなにおいがする.");
38673915 msg_given = TRUE;
38683916 break;
38693917 case S_UNICORN:
3918+#if 0 /*JP*/
38703919 You("detect a%s odor reminiscent of a stable.",
38713920 (mndx == PM_PONY) ? "n" : " strong");
3921+#else
3922+ pline("馬小屋を思い出すような%sにおいがした.",
3923+ (mndx == PM_PONY) ? "" : "強い");
3924+#endif
38723925 msg_given = TRUE;
38733926 break;
38743927 case S_ZOMBIE:
3928+/*JP
38753929 You("smell rotting flesh.");
3930+*/
3931+ pline("腐った肉のにおいがした.");
38763932 msg_given = TRUE;
38773933 break;
38783934 case S_EEL:
3935+/*JP
38793936 You("smell fish.");
3937+*/
3938+ pline("魚のにおいがした.");
38803939 msg_given = TRUE;
38813940 break;
38823941 case S_ORC:
38833942 if (maybe_polyd(is_orc(youmonst.data), Race_if(PM_ORC)))
3943+/*JP
38843944 You("notice an attractive smell.");
3945+*/
3946+ You("魅力的なにおいに気付いた.");
38853947 else
3948+/*JP
38863949 pline("A foul stench makes you feel a little nauseated.");
3950+*/
3951+ pline("むかつくような悪臭で少し気分が悪くなった.");
38873952 msg_given = TRUE;
38883953 break;
38893954 default:
--- a/src/mondata.c
+++ b/src/mondata.c
@@ -252,9 +252,15 @@ struct obj *obj; /* aatyp == AT_WEAP, AT_SPIT */
252252 if (check_visor) {
253253 o = (mdef == &youmonst) ? invent : mdef->minvent;
254254 for (; o; o = o->nobj)
255+#if 0 /*JP*/
255256 if ((o->owornmask & W_ARMH)
256257 && (s = OBJ_DESCR(objects[o->otyp])) != (char *) 0
257258 && !strcmp(s, "visored helmet"))
259+#else
260+ if ((o->owornmask & W_ARMH)
261+ && (s = OBJ_DESCR(objects[o->otyp])) != (char *) 0
262+ && !strcmp(s, "面頬付きの兜"))
263+#endif
258264 return FALSE;
259265 }
260266
--- a/src/muse.c
+++ b/src/muse.c
@@ -85,7 +85,10 @@ struct obj *obj;
8585 struct monst *mtmp;
8686
8787 potion_descr = OBJ_DESCR(objects[obj->otyp]);
88+/*JP
8889 if (potion_descr && !strcmp(potion_descr, "milky")) {
90+*/
91+ if (potion_descr && !strcmp(potion_descr, "ミルク色の")) {
8992 if (!(mvitals[PM_GHOST].mvflags & G_GONE)
9093 && !rn2(POTION_OCCUPANT_CHANCE(mvitals[PM_GHOST].born))) {
9194 if (!enexto(&cc, mon->mx, mon->my, &mons[PM_GHOST]))
@@ -125,7 +128,7 @@ struct obj *obj;
125128 /*JP
126129 if (potion_descr && !strcmp(potion_descr, "smoky")
127130 */
128- if (potion_descr && !strcmp(potion_descr, "煙の出ている薬")
131+ if (potion_descr && !strcmp(potion_descr, "煙の出ている")
129132 && !(mvitals[PM_DJINNI].mvflags & G_GONE)
130133 && !rn2(POTION_OCCUPANT_CHANCE(mvitals[PM_DJINNI].born))) {
131134 if (!enexto(&cc, mon->mx, mon->my, &mons[PM_DJINNI]))
--- a/src/music.c
+++ b/src/music.c
@@ -483,19 +483,35 @@ int force;
483483 ((Fumbling && !rn2(5))
484484 || (!rnl(Role_if(PM_ARCHEOLOGIST) ? 3 : 9))
485485 || ((ACURR(A_DEX) > 7) && rn2(5)));
486+/*JP
486487 You("are jostled around violently!");
488+*/
489+ You("乱暴に押しのけられた!");
487490 u.utrap = rn1(6, 2);
488491 u.utraptype = TT_PIT; /* superfluous */
492+#if 0 /*JP*/
489493 losehp(Maybe_Half_Phys(rnd(keepfooting ? 2 : 4)),
490494 "hurt in a chasm", NO_KILLER_PREFIX);
495+#else
496+ losehp(Maybe_Half_Phys(rnd(keepfooting ? 2 : 4)),
497+ "地割れで傷ついて", NO_KILLER_PREFIX);
498+#endif
491499 if (keepfooting)
492500 exercise(A_DEX, TRUE);
493501 else
502+#if 0 /*JP*/
494503 selftouch(
495504 (Upolyd && (slithy(youmonst.data)
496505 || nolimbs(youmonst.data)))
497506 ? "Shaken, you"
498507 : "Falling down, you");
508+#else
509+ selftouch(
510+ (Upolyd && (slithy(youmonst.data)
511+ || nolimbs(youmonst.data)))
512+ ? "揺さぶられて,あなたは"
513+ : "落ちながら,あなたは");
514+#endif
499515 }
500516 } else
501517 newsym(x, y);
@@ -712,7 +728,10 @@ struct obj *instr;
712728 || instr->otyp == TOOLED_HORN || instr->otyp == FROST_HORN
713729 || instr->otyp == FIRE_HORN || instr->otyp == BUGLE)
714730 && !can_blow(&youmonst)) {
731+/*JP
715732 You("are incapable of playing %s.", the(distant_name(instr, xname)));
733+*/
734+ You("%sを演奏する能力がない.", the(distant_name(instr, xname)));
716735 return 0;
717736 }
718737 if (instr->otyp != LEATHER_DRUM && instr->otyp != DRUM_OF_EARTHQUAKE) {
--- a/src/o_init.c
+++ b/src/o_init.c
@@ -493,11 +493,15 @@ oclass_to_name(oclass, buf)
493493 char oclass;
494494 char *buf;
495495 {
496+#if 0 /*JP*//*使わない*/
496497 char *s;
498+#endif
497499
498500 Strcpy(buf, let_to_name(oclass, FALSE, FALSE));
501+#if 0 /*JP*//*小文字化しない*/
499502 for (s = buf; *s; ++s)
500503 *s = lowc(*s);
504+#endif
501505 return buf;
502506 }
503507
@@ -506,10 +510,22 @@ int
506510 doclassdisco()
507511 {
508512 static NEARDATA const char
513+/*JP
509514 prompt[] = "View discoveries for which sort of objects?",
515+*/
516+ prompt[] = "どの種類の発見物を見ますか?",
517+/*JP
510518 havent_discovered_any[] = "haven't discovered any %s yet.",
519+*/
520+ havent_discovered_any[] = "まだ何も%sを発見していない.",
521+/*JP
511522 unique_items[] = "unique items",
523+*/
524+ unique_items[] = "特殊アイテム",
525+/*JP
512526 artifact_items[] = "artifacts";
527+*/
528+ artifact_items[] = "聖器";
513529 char *s, c, oclass, menulet, allclasses[MAXOCLASSES],
514530 discosyms[2 + MAXOCLASSES + 1], buf[BUFSZ];
515531 int i, ct, dis, xtras;
@@ -573,7 +589,10 @@ doclassdisco()
573589
574590 /* there might not be anything for us to do... */
575591 if (!discosyms[0]) {
592+/*JP
576593 You(havent_discovered_any, "items");
594+*/
595+ You(havent_discovered_any, "アイテム");
577596 if (tmpwin != WIN_ERR)
578597 destroy_nhwindow(tmpwin);
579598 return 0;
@@ -645,7 +664,10 @@ doclassdisco()
645664 break;
646665 default:
647666 oclass = def_char_to_objclass(c);
667+/*JP
648668 Sprintf(buf, "Discovered %s", let_to_name(oclass, FALSE, FALSE));
669+*/
670+ Sprintf(buf, "発見した%s", let_to_name(oclass, FALSE, FALSE));
649671 putstr(tmpwin, iflags.menu_headings, buf);
650672 for (i = bases[(int) oclass];
651673 i < NUM_OBJECTS && objects[i].oc_class == oclass; ++i) {
@@ -716,11 +738,20 @@ rename_disco()
716738 }
717739 }
718740 if (ct == 0) {
741+/*JP
719742 You("haven't discovered anything yet...");
743+*/
744+ You("まだ何も発見していない...");
720745 } else if (mn == 0) {
746+/*JP
721747 pline("None of your discoveries can be assigned names...");
748+*/
749+ pline("名前の付けられる発見物はない...");
722750 } else {
751+/*JP
723752 end_menu(tmpwin, "Pick an object type to name");
753+*/
754+ end_menu(tmpwin, "名前を付けるオブジェクトの種類を選んでください");
724755 dis = STRANGE_OBJECT;
725756 sl = select_menu(tmpwin, PICK_ONE, &selected);
726757 if (sl > 0) {
--- a/src/objnam.c
+++ b/src/objnam.c
@@ -56,6 +56,7 @@ struct Jitem {
5656 && typ != SAPPHIRE && typ != BLACK_OPAL && typ != EMERALD \
5757 && typ != OPAL)))
5858
59+#if 0 /*JP*/
5960 STATIC_OVL struct Jitem Japanese_items[] = { { SHORT_SWORD, "wakizashi" },
6061 { BROADSWORD, "ninja-to" },
6162 { FLAIL, "nunchaku" },
@@ -69,6 +70,21 @@ STATIC_OVL struct Jitem Japanese_items[] = { { SHORT_SWORD, "wakizashi" },
6970 { FOOD_RATION, "gunyoki" },
7071 { POT_BOOZE, "sake" },
7172 { 0, "" } };
73+#else
74+STATIC_OVL struct Jitem Japanese_items[] = { { SHORT_SWORD, "脇差し" },
75+ { BROADSWORD, "忍者刀" },
76+ { FLAIL, "ヌンチャク" },
77+ { GLAIVE, "なぎなた" },
78+ { LOCK_PICK, "おさく" },
79+ { WOODEN_HARP, "琴" },
80+ { KNIFE, "刺刀" },
81+ { PLATE_MAIL, "短甲" },
82+ { HELMET, "兜" },
83+ { LEATHER_GLOVES, "弓懸" },
84+ { FOOD_RATION, "丸薬" },
85+ { POT_BOOZE, "酒" },
86+ { 0, "" } };
87+#endif
7288
7389 STATIC_DCL const char *FDECL(Japanese_item_name, (int i));
7490
@@ -834,7 +850,10 @@ unsigned cxn_flags; /* bitmask of CXN_xxx values */
834850 if (obj->otyp == T_SHIRT && program_state.gameover) {
835851 char tmpbuf[BUFSZ];
836852
853+/*JP
837854 Sprintf(eos(buf), " with text \"%s\"", tshirt_text(obj, tmpbuf));
855+*/
856+ Sprintf(eos(buf), "(「%s」と書いてある)", tshirt_text(obj, tmpbuf));
838857 }
839858
840859 #if 0 /*JP*/
@@ -894,8 +913,13 @@ struct obj *obj;
894913 bareobj.spe = obj->spe;
895914
896915 bufp = distant_name(&bareobj, xname); /* xname(&bareobj) */
916+#if 0 /*JP*/
897917 if (!strncmp(bufp, "uncursed ", 9))
898918 bufp += 9; /* Role_if(PM_PRIEST) */
919+#else
920+ if (!strncmp(bufp, "呪われていない", 14))
921+ bufp += 14; /* Role_if(PM_PRIEST) */
922+#endif
899923
900924 objects[otyp].oc_uname = saveobcls.oc_uname;
901925 objects[otyp].oc_name_known = saveobcls.oc_name_known;
@@ -2914,6 +2938,8 @@ STATIC_OVL NEARDATA const struct o_range o_ranges[] = {
29142938 { "grey stone", GEM_CLASS, LUCKSTONE, FLINT },
29152939 };
29162940
2941+
2942+#if 0 /*JP*//*not used*/
29172943 /* alternate spellings; if the difference is only the presence or
29182944 absence of spaces and/or hyphens (such as "pickaxe" vs "pick axe"
29192945 vs "pick-axe") then there is no need for inclusion in this list;
@@ -2957,6 +2983,7 @@ struct alt_spellings {
29572983 { "flintstone", FLINT },
29582984 { (const char *) 0, 0 },
29592985 };
2986+#endif
29602987
29612988 short
29622989 rnd_otyp_by_wpnskill(skill)
@@ -3274,6 +3301,7 @@ struct obj *no_wish;
32743301 contents = SPINACH;
32753302 }
32763303
3304+#if 0 /*JP*//*日本語では処理しない*/
32773305 /*
32783306 Skip over "pair of ", "pairs of", "set of" and "sets of".
32793307
@@ -3298,7 +3326,9 @@ struct obj *no_wish;
32983326 } else if (!strncmpi(bp, "sets of ", 8)) {
32993327 bp += 8;
33003328 }
3329+#endif
33013330
3331+#if 0 /*JP*//*日本語では処理しない*/
33023332 /* intercept pudding globs here; they're a valid wish target,
33033333 * but we need them to not get treated like a corpse.
33043334 *
@@ -3330,6 +3360,7 @@ struct obj *no_wish;
33303360 *p = 0;
33313361 }
33323362 }
3363+#endif
33333364 /* Find corpse type w/o "of" (red dragon scale mail, yeti corpse) */
33343365 if (strncmpi(bp, "samurai sword", 13)) /* not the "samurai" monster! */
33353366 if (strncmpi(bp, "wizard lock", 11)) /* not the "wizard" monster! */
@@ -3361,6 +3392,7 @@ struct obj *no_wish;
33613392 }
33623393 }
33633394
3395+#if 0 /*JP*//*単数化はしない*/
33643396 /* first change to singular if necessary */
33653397 if (*bp) {
33663398 char *sng = makesingular(bp);
@@ -3370,7 +3402,9 @@ struct obj *no_wish;
33703402 Strcpy(bp, sng);
33713403 }
33723404 }
3405+#endif
33733406
3407+#if 0 /*JP*//*スペル揺れ処理はしない*/
33743408 /* Alternate spellings (pick-ax, silver sabre, &c) */
33753409 {
33763410 struct alt_spellings *as = spellings;
@@ -3393,6 +3427,7 @@ struct obj *no_wish;
33933427 ++p; /* self terminating */
33943428 }
33953429 }
3430+#endif
33963431
33973432 /* dragon scales - assumes order of dragons */
33983433 if (!strcmpi(bp, "scales") && mntmp >= PM_GRAY_DRAGON
@@ -3403,6 +3438,7 @@ struct obj *no_wish;
34033438 }
34043439
34053440 p = eos(bp);
3441+#if 0 /*JP*/
34063442 if (!BSTRCMPI(bp, p - 10, "holy water")) {
34073443 typ = POT_WATER;
34083444 if ((p - bp) >= 12 && *(p - 12) == 'u')
@@ -3411,11 +3447,31 @@ struct obj *no_wish;
34113447 blessed = 1;
34123448 goto typfnd;
34133449 }
3450+#else /*JP:聖水と不浄な水を別に判定*/
3451+ if (!BSTRCMPI(bp, p - 4, "聖水")) {
3452+ typ = POT_WATER;
3453+ blessed = 1;
3454+ goto typfnd;
3455+ }
3456+ if (!BSTRCMPI(bp, p - 4, "不浄な水")) {
3457+ typ = POT_WATER;
3458+ iscursed = 1;
3459+ goto typfnd;
3460+ }
3461+#endif
3462+#if 0 /*JP*/
34143463 if (unlabeled && !BSTRCMPI(bp, p - 6, "scroll")) {
3464+#else
3465+ if (unlabeled && !BSTRCMPI(bp, p - 4, "巻物")) {
3466+#endif
34153467 typ = SCR_BLANK_PAPER;
34163468 goto typfnd;
34173469 }
3470+#if 0 /*JP*/
34183471 if (unlabeled && !BSTRCMPI(bp, p - 9, "spellbook")) {
3472+#else
3473+ if (unlabeled && !BSTRCMPI(bp, p - 6, "魔法書")) {
3474+#endif
34193475 typ = SPE_BLANK_PAPER;
34203476 goto typfnd;
34213477 }
@@ -3425,9 +3481,14 @@ struct obj *no_wish;
34253481 * gold/money concept. Maybe we want to add other monetary units as
34263482 * well in the future. (TH)
34273483 */
3484+#if 0 /*JP*/
34283485 if (!BSTRCMPI(bp, p - 10, "gold piece") || !BSTRCMPI(bp, p - 7, "zorkmid")
34293486 || !strcmpi(bp, "gold") || !strcmpi(bp, "money")
34303487 || !strcmpi(bp, "coin") || *bp == GOLD_SYM) {
3488+#else
3489+ if (!BSTRCMPI(bp, p - 4, "金貨") || !BSTRCMPI(bp, p - 8, "ゴールド")
3490+ || *bp == GOLD_SYM) {
3491+#endif
34313492 if (cnt > 5000 && !wizard)
34323493 cnt = 5000;
34333494 else if (cnt < 1)
@@ -3622,7 +3683,11 @@ srch:
36223683 Strcat(bp, " mail");
36233684 goto retry;
36243685 }
3686+#if 0 /*JP*/
36253687 if (!strcmpi(bp, "spinach")) {
3688+#else
3689+ if (!strcmp(bp, "ホウレン草")) {
3690+#endif
36263691 contents = SPINACH;
36273692 typ = TIN;
36283693 goto typfnd;
--- a/src/options.c
+++ b/src/options.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 #ifdef OPTION_LISTS_ONLY /* (AMIGA) external program for opt lists */
611 #include "config.h"
712 #include "objclass.h"
@@ -478,8 +483,13 @@ static struct Comp_Opt {
478483 { "hicolor", "パレットが同じとき、指示したものだけ反転させる", 15, SET_IN_FILE },
479484 #endif
480485 #endif
486+#if 0 /*JP*/
481487 { "paranoid_confirmation", "extra prompting in certain situations", 28,
482488 SET_IN_GAME },
489+#else
490+ { "paranoid_confirmation", "一部の状況で追加の確認をする", 28,
491+ SET_IN_GAME },
492+#endif
483493 /*JP
484494 { "pettype", "your preferred initial pet type", 4, DISP_IN_GAME },
485495 */
@@ -494,10 +504,20 @@ static struct Comp_Opt {
494504 */
495505 { "pickup_types", "自動で拾いあげる物のシンボル",
496506 MAXOCLASSES, SET_IN_GAME },
507+#if 0 /*JP*/
497508 { "pile_limit", "threshold for \"there are many objects here\"", 24,
498509 SET_IN_GAME },
510+#else
511+ { "pile_limit", "「ここにはたくさんのものがある」のしきい値", 24,
512+ SET_IN_GAME },
513+#endif
514+#if 0 /*JP*/
499515 { "playmode", "normal play, non-scoring explore mode, or debug mode", 8,
500516 DISP_IN_GAME },
517+#else
518+ { "playmode", "通常モード,探検モード,デバッグモードのいずれか", 8,
519+ DISP_IN_GAME },
520+#endif
501521 /*JP
502522 { "player_selection", "choose character via dialog or prompts", 12,
503523 */
@@ -533,7 +553,10 @@ static struct Comp_Opt {
533553 */
534554 { "scroll_margin", "マップ端からのマップスクロール開始距離", 20,
535555 DISP_IN_GAME }, /*WC*/
556+/*JP
536557 { "sortloot", "sort object selection lists by description", 4,
558+*/
559+ { "sortloot", "物体選択リストを説明でソートする", 4,
537560 SET_IN_GAME },
538561 #ifdef MSDOS
539562 /*JP
@@ -541,11 +564,22 @@ static struct Comp_Opt {
541564 */
542565 { "soundcard", "使用しているサウンドカードの種類", 20, SET_IN_FILE },
543566 #endif
567+#if 0 /*JP*/
544568 { "symset", "load a set of display symbols from the symbols file", 70,
545569 SET_IN_GAME },
570+#else
571+ { "symset", "symbolsファイルから表示シンボルの設定を読み込む", 70,
572+ SET_IN_GAME },
573+#endif
574+#if 0 /*JP*/
546575 { "roguesymset",
547576 "load a set of rogue display symbols from the symbols file", 70,
548577 SET_IN_GAME },
578+#else
579+ { "roguesymset",
580+ "symbolsファイルからローグレベルの表示シンボルの設定を読み込む", 70,
581+ SET_IN_GAME },
582+#endif
549583 /*JP
550584 { "suppress_alert", "suppress alerts about version-specific features", 8,
551585 */
@@ -611,13 +645,25 @@ static struct Comp_Opt {
611645 */
612646 { "windowtype", "使用するウインドウシステム", WINTYPELEN, DISP_IN_GAME },
613647 #ifdef WINCHAIN
648+/*JP
614649 { "windowchain", "window processor to use", WINTYPELEN, SET_IN_SYS },
650+*/
651+ { "windowchain", "使用するウィンドウプロセッサ", WINTYPELEN, SET_IN_SYS },
615652 #endif
616653 #ifdef BACKWARD_COMPAT
654+/*JP
617655 { "DECgraphics", "load DECGraphics display symbols", 70, SET_IN_FILE },
656+*/
657+ { "DECgraphics", "DECGraphics表示シンボルを読み込む", 70, SET_IN_FILE },
658+/*JP
618659 { "IBMgraphics", "load IBMGraphics display symbols", 70, SET_IN_FILE },
660+*/
661+ { "IBMgraphics", "IBMGraphics表示シンボルを読み込む", 70, SET_IN_FILE },
619662 #ifdef MAC_GRAPHICS_ENV
663+/*JP
620664 { "Macgraphics", "load MACGraphics display symbols", 70, SET_IN_FILE },
665+*/
666+ { "Macgraphics", "MACGraphics表示シンボルを読み込む", 70, SET_IN_FILE },
621667 #endif
622668 #endif
623669 #if 1 /*JP*/
--- a/src/pager.c
+++ b/src/pager.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 /* This file contains the command routines dowhatis() and dohelp() and */
611 /* a few other help related facilities */
712
@@ -367,6 +372,7 @@ char *buf, *monbuf;
367372 how |= 4;
368373
369374 if (how)
375+#if 0 /*JP*/
370376 Sprintf(
371377 eos(buf), " [seen: %s%s%s%s%s]",
372378 (how & 1) ? "infravision" : "",
@@ -375,6 +381,16 @@ char *buf, *monbuf;
375381 /* add comma if detect and (infrav or telep or both) */
376382 ((how & 7) > 4) ? ", " : "",
377383 (how & 4) ? "monster detection" : "");
384+#else
385+ Sprintf(
386+ eos(buf), " [感知: %s%s%s%s%s]",
387+ (how & 1) ? "赤外線" : "",
388+ /* add comma if telep and infrav */
389+ ((how & 3) > 2) ? ", " : "", (how & 2) ? "テレパシー" : "",
390+ /* add comma if detect and (infrav or telep or both) */
391+ ((how & 7) > 4) ? ", " : "",
392+ (how & 4) ? "怪物感知" : "");
393+#endif
378394 }
379395 } else if (u.uswallow) {
380396 /* all locations when swallowed other than the hero are the monster */
@@ -971,15 +987,24 @@ coord *click_cc;
971987 versions: "Specify unknown object by cursor?" */
972988 add_menu(win, NO_GLYPH, &any,
973989 flags.lootabc ? 0 : any.a_char, 'y', ATR_NONE,
990+/*JP
974991 "something on the map", MENU_UNSELECTED);
992+*/
993+ "地図上にあるもの", MENU_UNSELECTED);
975994 any.a_char = 'i';
976995 add_menu(win, NO_GLYPH, &any,
977996 flags.lootabc ? 0 : any.a_char, 0, ATR_NONE,
997+/*JP
978998 "something you're carrying", MENU_UNSELECTED);
999+*/
1000+ "あなたが持っているもの", MENU_UNSELECTED);
9791001 any.a_char = '?';
9801002 add_menu(win, NO_GLYPH, &any,
9811003 flags.lootabc ? 0 : any.a_char, 'n', ATR_NONE,
1004+/*JP
9821005 "something else (by symbol or name)", MENU_UNSELECTED);
1006+*/
1007+ "それ以外(シンボルか名前で指定)", MENU_UNSELECTED);
9831008 if (!u.uswallow && !Hallucination) {
9841009 any = zeroany;
9851010 add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE,
@@ -992,21 +1017,36 @@ coord *click_cc;
9921017 any.a_char = 'm';
9931018 add_menu(win, NO_GLYPH, &any,
9941019 flags.lootabc ? 0 : any.a_char, 0, ATR_NONE,
1020+/*JP
9951021 "nearby monsters", MENU_UNSELECTED);
1022+*/
1023+ "近くにいる怪物", MENU_UNSELECTED);
9961024 any.a_char = 'M';
9971025 add_menu(win, NO_GLYPH, &any,
9981026 flags.lootabc ? 0 : any.a_char, 0, ATR_NONE,
1027+/*JP
9991028 "all monsters shown on map", MENU_UNSELECTED);
1029+*/
1030+ "地図上にいる全ての怪物", MENU_UNSELECTED);
10001031 any.a_char = 'o';
10011032 add_menu(win, NO_GLYPH, &any,
10021033 flags.lootabc ? 0 : any.a_char, 0, ATR_NONE,
1034+/*JP
10031035 "nearby objects", MENU_UNSELECTED);
1036+*/
1037+ "近くにあるもの", MENU_UNSELECTED);
10041038 any.a_char = 'O';
10051039 add_menu(win, NO_GLYPH, &any,
10061040 flags.lootabc ? 0 : any.a_char, 0, ATR_NONE,
1041+/*JP
10071042 "all objects shown on map", MENU_UNSELECTED);
1043+*/
1044+ "地図上にある全てのもの", MENU_UNSELECTED);
10081045 }
1046+/*JP
10091047 end_menu(win, "What do you want to look at:");
1048+*/
1049+ end_menu(win, "何を見る?");
10101050 if (select_menu(win, PICK_ONE, &pick_list) > 0) {
10111051 i = pick_list->item.a_char;
10121052 free((genericptr_t) pick_list);
@@ -1226,9 +1266,15 @@ boolean do_mons; /* True => monsters, False => objects */
12261266 if (count)
12271267 display_nhwindow(win, TRUE);
12281268 else
1269+#if 0 /*JP*/
12291270 pline("No %s are currently shown %s.",
12301271 do_mons ? "monsters" : "objects",
12311272 nearby ? "nearby" : "on the map");
1273+#else
1274+ pline("今のところ%sに%s.",
1275+ nearby ? "近く" : "地図上",
1276+ do_mons ? "怪物はいない" : "ものはない");
1277+#endif
12321278 destroy_nhwindow(win);
12331279 }
12341280
--- a/src/pickup.c
+++ b/src/pickup.c
@@ -75,15 +75,15 @@ static NEARDATA struct obj *current_container;
7575 /*JP
7676 static const char moderateloadmsg[] = "You have a little trouble lifting";
7777 */
78-static const char moderateloadmsg[] = "を持ったら少しふらついた.";
78+static const char moderateloadmsg[] = "を持ったら少しふらついた";
7979 /*JP
8080 static const char nearloadmsg[] = "You have much trouble lifting";
8181 */
82-static const char nearloadmsg[] = "はずっしりと肩にのしかかった.";
82+static const char nearloadmsg[] = "はずっしりと肩にのしかかった";
8383 /*JP
8484 static const char overloadmsg[] = "You have extreme difficulty lifting";
8585 */
86-static const char overloadmsg[] = "を持ちあげるのはとてもつらい.";
86+static const char overloadmsg[] = "を持ちあげるのはとてもつらい";
8787
8888 /* BUG: this lets you look at cockatrice corpses while blind without
8989 touching them */
@@ -945,8 +945,13 @@ boolean FDECL((*allow), (OBJ_P)); /* allow function */
945945
946946 any = zeroany;
947947 if (sorted && n > 1) {
948+#if 0 /*JP*/
948949 Sprintf(buf, "%s Creatures",
949950 is_animal(u.ustuck->data) ? "Swallowed" : "Engulfed");
951+#else
952+ Sprintf(buf, "%s込まれている怪物",
953+ is_animal(u.ustuck->data) ? "飲み" : "巻き");
954+#endif
950955 add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings, buf,
951956 MENU_UNSELECTED);
952957 }
@@ -1183,7 +1188,7 @@ int how; /* type of query */
11831188 /*JP
11841189 "Items of unknown B/C/U status", MENU_UNSELECTED);
11851190 */
1186- "祝福/呪いがわからないもの", MENU_UNSELECTED);
1191+ "祝福/呪いがわからないもの", MENU_UNSELECTED);
11871192 }
11881193 end_menu(win, qstr);
11891194 n = select_menu(win, how, pick_list);
@@ -1360,7 +1365,7 @@ int *wt_before, *wt_after;
13601365 (qq == 1L) ? "one" : "some", obj_nambuf, where);
13611366 #else
13621367 You("%s%sのうちの%sしか%s.",
1363- where, obj_nambuf, (qq == 1L) ? "1つ" : "いくつか", verb);
1368+ where, obj_nambuf, (qq == 1L) ? "一つ" : "いくつか", verb);
13641369 #endif
13651370 *wt_after = wt;
13661371 return qq;
@@ -1465,19 +1470,41 @@ boolean telekinesis;
14651470 result = 0; /* don't lift */
14661471 } else {
14671472 char qbuf[BUFSZ];
1473+#if 1 /*JP*/
1474+ char qsfx[BUFSZ];
1475+#endif
14681476 long savequan = obj->quan;
14691477
14701478 obj->quan = *cnt_p;
1479+#if 0 /*JP*/
14711480 Strcpy(qbuf, (next_encumbr > HVY_ENCUMBER)
14721481 ? overloadmsg
14731482 : (next_encumbr > MOD_ENCUMBER)
14741483 ? nearloadmsg
14751484 : moderateloadmsg);
1485+#else
1486+ /*JP:アイテム名の後ろに付けたいがsafe_qbufのqsuffixは
1487+ qbufと共用できないので別にqsfxを用意してそちらを使う*/
1488+ Strcpy(qsfx, (next_encumbr > HVY_ENCUMBER)
1489+ ? overloadmsg
1490+ : (next_encumbr > MOD_ENCUMBER)
1491+ ? nearloadmsg
1492+ : moderateloadmsg);
1493+ Strcat(qsfx, ".続けますか?");
1494+#endif
1495+
1496+#if 0 /*JP*//*日本語ではどちらも「持つ」で済ませる*/
14761497 if (container)
14771498 (void) strsubst(qbuf, "lifting", "removing");
1499+#endif
1500+#if 0 /*JP*/
14781501 Strcat(qbuf, " ");
14791502 (void) safe_qbuf(qbuf, qbuf, ". Continue?", obj, doname,
14801503 ansimpleoname, something);
1504+#else /*JP:前には何も付けず後ろにqsfxを付ける*/
1505+ (void) safe_qbuf(qbuf, "", qsfx, obj, doname,
1506+ ansimpleoname, "これ");
1507+#endif
14811508 obj->quan = savequan;
14821509 switch (ynq(qbuf)) {
14831510 case 'q':
@@ -1817,7 +1844,7 @@ doloot()
18171844 int timepassed = 0;
18181845 coord cc;
18191846 boolean underfoot = TRUE;
1820-#if 0 /*JP*/
1847+#if 0 /*JP*//*not used*/
18211848 const char *dont_find_anything = "don't find anything";
18221849 #endif
18231850 struct monst *mtmp;
@@ -1842,7 +1869,10 @@ doloot()
18421869 if (rn2(6) && reverse_loot())
18431870 return 1;
18441871 if (rn2(2)) {
1872+/*JP
18451873 pline("Being confused, you find nothing to loot.");
1874+*/
1875+ pline("混乱しているので,開けるものを見つけられない.");
18461876 return 1; /* costs a turn */
18471877 } /* else fallthrough to normal looting */
18481878 }
@@ -2029,7 +2059,10 @@ reverse_loot()
20292059 */
20302060 for (n = inv_cnt(TRUE), otmp = invent; otmp; --n, otmp = otmp->nobj)
20312061 if (!rn2(n + 1)) {
2062+/*JP
20322063 prinv("You find old loot:", otmp, 0L);
2064+*/
2065+ prinv("以前開けたもの:", otmp, 0L);
20332066 return TRUE;
20342067 }
20352068 return FALSE;
@@ -2094,7 +2127,10 @@ reverse_loot()
20942127 if (!rn2(10))
20952128 levl[x][y].looted = T_LOOTED;
20962129 } else {
2130+/*JP
20972131 You("drop %s.", doname(goldob));
2132+*/
2133+ You("%sを落した.", doname(goldob));
20982134 dropx(goldob);
20992135 }
21002136 }
@@ -2718,12 +2754,23 @@ int held;
27182754 for (;;) { /* repeats if '?' or ":' gets chosen */
27192755 outmaybe = (outokay || !current_container->cknown);
27202756 if (!outmaybe)
2757+#if 0 /*JP*/
27212758 (void) safe_qbuf(qbuf, (char *) 0, " is empty. Do what with it?",
27222759 current_container, Yname2, Ysimple_name2,
27232760 "This");
2761+#else
2762+ (void) safe_qbuf(qbuf, (char *) 0, "は空だ.どうする?",
2763+ current_container, Yname2, Ysimple_name2,
2764+ "これ");
2765+#endif
27242766 else
2767+#if 0 /*JP*/
27252768 (void) safe_qbuf(qbuf, "Do what with ", "?", current_container,
27262769 yname, ysimple_name, "it");
2770+#else
2771+ (void) safe_qbuf(qbuf, (char *) 0, "をどうする?", current_container,
2772+ yname, ysimple_name, "これ");
2773+#endif
27272774 /* ask player about what to do with this container */
27282775 if (flags.menu_style == MENU_FULL) {
27292776 if (!inokay && !outmaybe) {
@@ -2786,8 +2833,12 @@ int held;
27862833
27872834 if ((loot_in || stash_one)
27882835 && (!invent || (invent == current_container && !invent->nobj))) {
2836+#if 0 /*JP*/
27892837 You("don't have anything%s to %s.", invent ? " else" : "",
27902838 stash_one ? "stash" : "put in");
2839+#else
2840+ You("%s入れるものがない.", invent ? "他に" : "");
2841+#endif
27912842 loot_in = stash_one = FALSE;
27922843 }
27932844
@@ -2866,12 +2917,18 @@ boolean put_in;
28662917 int used = 0, menu_on_request = 0;
28672918
28682919 if (put_in) {
2920+/*JP
28692921 action = "put in";
2922+*/
2923+ action = "入れる";
28702924 objlist = &invent;
28712925 actionfunc = in_container;
28722926 checkfunc = ck_bag;
28732927 } else {
2928+/*JP
28742929 action = "take out";
2930+*/
2931+ action = "取り出す";
28752932 objlist = &(current_container->cobj);
28762933 actionfunc = out_container;
28772934 checkfunc = (int FDECL((*), (OBJ_P))) 0;
@@ -2897,7 +2954,10 @@ boolean put_in;
28972954 int n, i, n_looted = 0;
28982955 boolean all_categories = TRUE, loot_everything = FALSE;
28992956 char buf[BUFSZ];
2957+/*JP
29002958 const char *action = put_in ? "Put in" : "Take out";
2959+*/
2960+ const char *action = put_in ? "入れる" : "取り出す";
29012961 struct obj *otmp, *otmp2;
29022962 menu_item *pick_list;
29032963 int mflags, res;
@@ -2907,7 +2967,10 @@ boolean put_in;
29072967 all_categories = (retry == -2);
29082968 } else if (flags.menu_style == MENU_FULL) {
29092969 all_categories = FALSE;
2970+/*JP
29102971 Sprintf(buf, "%s what type of objects?", action);
2972+*/
2973+ Sprintf(buf, "どの種類のものを%s?", action);
29112974 mflags = put_in
29122975 ? ALL_TYPES | BUC_ALLBKNOWN | BUC_UNKNOWN
29132976 : ALL_TYPES | CHOOSE_ALL | BUC_ALLBKNOWN | BUC_UNKNOWN;
@@ -2940,7 +3003,10 @@ boolean put_in;
29403003 mflags |= USE_INVLET;
29413004 if (!put_in)
29423005 current_container->cknown = 1;
3006+/*JP
29433007 Sprintf(buf, "%s what?", action);
3008+*/
3009+ Sprintf(buf, "何を%s?", action);
29443010 n = query_objlist(buf, put_in ? invent : current_container->cobj,
29453011 mflags, &pick_list, PICK_ANY,
29463012 all_categories ? allow_all : allow_category);
@@ -2992,40 +3058,63 @@ boolean outokay, inokay, alreadyused;
29923058 start_menu(win);
29933059
29943060 any.a_int = 1; /* ':' */
3061+/*JP
29953062 Sprintf(buf, "Look inside %s", thesimpleoname(obj));
3063+*/
3064+ Sprintf(buf, "%sの中身を見る", thesimpleoname(obj));
29963065 add_menu(win, NO_GLYPH, &any, menuselector[any.a_int], 0, ATR_NONE, buf,
29973066 MENU_UNSELECTED);
29983067 if (outokay) {
29993068 any.a_int = 2; /* 'o' */
3069+/*JP
30003070 Sprintf(buf, "take %s out", something);
3071+*/
3072+ Strcpy(buf, "何かを取り出す");
30013073 add_menu(win, NO_GLYPH, &any, menuselector[any.a_int], 0, ATR_NONE,
30023074 buf, MENU_UNSELECTED);
30033075 }
30043076 if (inokay) {
30053077 any.a_int = 3; /* 'i' */
3078+/*JP
30063079 Sprintf(buf, "put %s in", something);
3080+*/
3081+ Strcpy(buf, "何かを入れる");
30073082 add_menu(win, NO_GLYPH, &any, menuselector[any.a_int], 0, ATR_NONE,
30083083 buf, MENU_UNSELECTED);
30093084 }
30103085 if (outokay) {
30113086 any.a_int = 4; /* 'b' */
3087+/*JP
30123088 Sprintf(buf, "%stake out, then put in", inokay ? "both; " : "");
3089+*/
3090+ Sprintf(buf, "%sまず取り出す,それから入れる", inokay ? "両方; " : "");
30133091 add_menu(win, NO_GLYPH, &any, menuselector[any.a_int], 0, ATR_NONE,
30143092 buf, MENU_UNSELECTED);
30153093 }
30163094 if (inokay) {
30173095 any.a_int = 5; /* 'r' */
3096+#if 0 /*JP*/
30183097 Sprintf(buf, "%sput in, then take out",
30193098 outokay ? "both reversed; " : "");
3099+#else
3100+ Sprintf(buf, "%sまず入れる,それから取り出す",
3101+ outokay ? "両方を逆順で; " : "");
3102+#endif
30203103 add_menu(win, NO_GLYPH, &any, menuselector[any.a_int], 0, ATR_NONE,
30213104 buf, MENU_UNSELECTED);
30223105 any.a_int = 6; /* 's' */
3106+/*JP
30233107 Sprintf(buf, "stash one item into %s", thesimpleoname(obj));
3108+*/
3109+ Sprintf(buf, "ものを一つだけ%sに入れる", thesimpleoname(obj));
30243110 add_menu(win, NO_GLYPH, &any, menuselector[any.a_int], 0, ATR_NONE,
30253111 buf, MENU_UNSELECTED);
30263112 }
30273113 any.a_int = 7; /* 'q' */
3114+/*JP
30283115 Strcpy(buf, alreadyused ? "done" : "do nothing");
3116+*/
3117+ Strcpy(buf, alreadyused ? "終わる" : "何もしない");
30293118 add_menu(win, NO_GLYPH, &any, menuselector[any.a_int], 0, ATR_NONE, buf,
30303119 MENU_SELECTED);
30313120
@@ -3062,8 +3151,12 @@ dotip()
30623151
30633152 /* check floor container(s) first; at most one will be accessed */
30643153 if ((boxes = container_at(cc.x, cc.y, TRUE)) > 0) {
3154+#if 0 /*JP*/
30653155 Sprintf(buf, "You can't tip %s while carrying so much.",
30663156 !flags.verbose ? "a container" : (boxes > 1) ? "one" : "it");
3157+#else
3158+ Strcpy(buf, "たくさんものを持ちすぎているのでひっくりかえせない.");
3159+#endif
30673160 if (!check_capacity(buf) && able_to_loot(cc.x, cc.y, FALSE)) {
30683161 if (boxes > 1 && (flags.menu_style != MENU_TRADITIONAL
30693162 || iflags.menu_requested)) {
@@ -3124,9 +3217,15 @@ dotip()
31243217 nobj = cobj->nexthere;
31253218 if (!Is_container(cobj))
31263219 continue;
3220+#if 0 /*JP*/
31273221 c = ynq(safe_qbuf(qbuf, "There is ", " here, tip it?",
31283222 cobj,
31293223 doname, ansimpleoname, "container"));
3224+#else
3225+ c = ynq(safe_qbuf(qbuf, "ここには", " がある,ひっくり返す?",
3226+ cobj,
3227+ doname, ansimpleoname, "入れ物"));
3228+#endif
31303229 if (c == 'q')
31313230 return 0;
31323231 if (c == 'n')
@@ -3152,30 +3251,57 @@ dotip()
31523251 /* assorted other cases */
31533252 if (Is_candle(cobj) && cobj->lamplit) {
31543253 /* note "wax" even for tallow candles to avoid giving away info */
3254+/*JP
31553255 spillage = "wax";
3256+*/
3257+ spillage = "ろう";
31563258 } else if ((cobj->otyp == POT_OIL && cobj->lamplit)
31573259 || (cobj->otyp == OIL_LAMP && cobj->age != 0L)
31583260 || (cobj->otyp == MAGIC_LAMP && cobj->spe != 0)) {
3261+/*JP
31593262 spillage = "oil";
3263+*/
3264+ spillage = "油";
31603265 /* todo: reduce potion's remaining burn timer or oil lamp's fuel */
31613266 } else if (cobj->otyp == CAN_OF_GREASE && cobj->spe > 0) {
31623267 /* charged consumed below */
3268+/*JP
31633269 spillage = "grease";
3270+*/
3271+ spillage = "脂";
31643272 } else if (cobj->otyp == FOOD_RATION || cobj->otyp == CRAM_RATION
31653273 || cobj->otyp == LEMBAS_WAFER) {
3274+/*JP
31663275 spillage = "crumbs";
3276+*/
3277+ spillage = "パンくず";
31673278 } else if (cobj->oclass == VENOM_CLASS) {
3279+/*JP
31683280 spillage = "venom";
3281+*/
3282+ spillage = "毒液";
31693283 }
31703284 if (spillage) {
31713285 buf[0] = '\0';
31723286 if (is_pool(u.ux, u.uy))
3287+/*JP
31733288 Sprintf(buf, " and gradually %s", vtense(spillage, "dissipate"));
3289+*/
3290+ Strcpy(buf, "そして徐々に散っていった.");
31743291 else if (is_lava(u.ux, u.uy))
3292+#if 0 /*JP*/
31753293 Sprintf(buf, " and immediately %s away",
31763294 vtense(spillage, "burn"));
3295+#else
3296+ Strcpy(buf, "そしてすぐに燃えつきた.");
3297+#endif
3298+#if 0 /*JP*/
31773299 pline("Some %s %s onto the %s%s.", spillage,
31783300 vtense(spillage, "spill"), surface(u.ux, u.uy), buf);
3301+#else
3302+ pline("%sが%sの上に飛び散った.%s", spillage,
3303+ surface(u.ux, u.uy), buf);
3304+#endif
31793305 /* shop usage message comes after the spill message */
31803306 if (cobj->otyp == CAN_OF_GREASE && cobj->spe > 0) {
31813307 consume_obj_charge(cobj, TRUE);
@@ -3185,7 +3311,10 @@ dotip()
31853311 }
31863312 /* anything not covered yet */
31873313 if (cobj->oclass == POTION_CLASS) /* can't pour potions... */
3314+/*JP
31883315 pline_The("%s %s securely sealed.", xname(cobj), otense(cobj, "are"));
3316+*/
3317+ pline_The("%sはしっかりと栓がされている.", xname(cobj));
31893318 else if (cobj->otyp == STATUE)
31903319 /*JP
31913320 pline("Nothing interesting happens.");
@@ -3221,7 +3350,10 @@ struct obj *box; /* or bag */
32213350 non-standard "container" horn of plenty */
32223351 box->lknown = 1;
32233352 if (box->olocked) {
3353+/*JP
32243354 pline("It's locked.");
3355+*/
3356+ pline("鍵が掛かっている.");
32253357 } else if (box->otrapped) {
32263358 /* we're not reaching inside but we're still handling it... */
32273359 (void) chest_trap(box, HAND, FALSE);
@@ -3247,9 +3379,15 @@ struct obj *box; /* or bag */
32473379
32483380 if (box->spe < old_spe) {
32493381 if (bag)
3382+#if 0 /*JP*/
32503383 pline((seen == 0) ? "Nothing seems to happen."
32513384 : (seen == 1) ? "A monster appears."
32523385 : "Monsters appear!");
3386+#else
3387+ pline((seen == 0) ? "何も起きなかったようだ."
3388+ : (seen == 1) ? "怪物が現れた."
3389+ : "怪物が現れた!");
3390+#endif
32533391 /* check_unpaid wants to see a non-zero charge count */
32543392 box->spe = old_spe;
32553393 check_unpaid_usage(box, TRUE);
@@ -3264,13 +3402,19 @@ struct obj *box; /* or bag */
32643402 observe_quantum_cat(box);
32653403 if (!Has_contents(box)) /* evidently a live cat came out */
32663404 /* container type of "large box" is inferred */
3405+/*JP
32673406 pline("%sbox is now empty.", Shk_Your(yourbuf, box));
3407+*/
3408+ pline("%s箱は空になった.", Shk_Your(yourbuf, box));
32683409 else /* holds cat corpse or other random stuff */
32693410 empty_it = TRUE;
32703411 box->cknown = 1;
32713412 } else if (!Has_contents(box)) {
32723413 box->cknown = 1;
3414+/*JP
32733415 pline("It's empty.");
3416+*/
3417+ pline("これは空だ.");
32743418 } else {
32753419 empty_it = TRUE;
32763420 }
@@ -3286,9 +3430,14 @@ struct obj *box; /* or bag */
32863430 if (u.uswallow)
32873431 highdrop = altarizing = FALSE;
32883432 box->cknown = 1;
3433+#if 0 /*JP*/
32893434 pline("%s out%c",
32903435 box->cobj->nobj ? "Objects spill" : "An object spills",
32913436 !(highdrop || altarizing) ? ':' : '.');
3437+#else
3438+ pline("中身が出てきた%s",
3439+ !(highdrop || altarizing) ? ":" : ".");
3440+#endif
32923441 for (otmp = box->cobj; otmp; otmp = nobj) {
32933442 nobj = otmp->nobj;
32943443 obj_extract_self(otmp);
@@ -3311,17 +3460,28 @@ struct obj *box; /* or bag */
33113460 if (altarizing)
33123461 doaltarobj(otmp);
33133462 else if (verbose)
3463+#if 0 /*JP*/
33143464 pline("%s %s to the %s.", Doname2(otmp),
33153465 otense(otmp, "drop"), surface(ox, oy));
3466+#else
3467+ pline("%sは%sの上に落ちた.", Doname2(otmp),
3468+ surface(ox, oy));
3469+#endif
33163470 else
3471+/*JP
33173472 pline("%s%c", doname(otmp), nobj ? ',' : '.');
3473+*/
3474+ pline("%s%s", doname(otmp), nobj ? "," : ".");
33183475 dropy(otmp);
33193476 }
33203477 if (maybeshopgoods)
33213478 iflags.suppress_price--; /* reset */
33223479 }
33233480 if (loss) /* magic bag lost some shop goods */
3481+/*JP
33243482 You("owe %ld %s for lost merchandise.", loss, currency(loss));
3483+*/
3484+ You("失ったものに対して%ld%sの負債を負った.", loss, currency(loss));
33253485 box->owt = weight(box); /* mbag_item_gone() doesn't update this */
33263486 if (held)
33273487 (void) encumber_msg();
--- a/src/pline.c
+++ b/src/pline.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 #define NEED_VARARGS /* Uses ... */ /* comment line for pre-compiled headers \
611 */
712 #include "hack.h"
@@ -493,6 +498,7 @@ register struct monst *mtmp;
493498 /* a stethoscope exposes mimic before getting here so this
494499 won't be relevant for it, but wand of probing doesn't */
495500 if (mtmp->m_ap_type)
501+#if 0 /*JP*/
496502 Sprintf(eos(info), ", mimicking %s",
497503 (mtmp->m_ap_type == M_AP_FURNITURE)
498504 ? an(defsyms[mtmp->mappearance].explanation)
@@ -503,6 +509,18 @@ register struct monst *mtmp;
503509 : (mtmp->m_ap_type == M_AP_MONSTER)
504510 ? an(mons[mtmp->mappearance].mname)
505511 : something); /* impossible... */
512+#else
513+ Sprintf(eos(info), ", %sのまねをしている",
514+ (mtmp->m_ap_type == M_AP_FURNITURE)
515+ ? an(defsyms[mtmp->mappearance].explanation)
516+ : (mtmp->m_ap_type == M_AP_OBJECT)
517+ ? ((mtmp->mappearance == GOLD_PIECE)
518+ ? "金貨"
519+ : an(simple_typename(mtmp->mappearance)))
520+ : (mtmp->m_ap_type == M_AP_MONSTER)
521+ ? an(mons[mtmp->mappearance].mname)
522+ : something); /* impossible... */
523+#endif
506524 if (mtmp->mcan)
507525 /*JP
508526 Strcat(info, ", cancelled");
@@ -820,19 +838,33 @@ struct obj *otmp2;
820838 if ((!Blind && visible) || inpack) {
821839 if (Hallucination) {
822840 if (onfloor) {
841+/*JP
823842 You_see("parts of the floor melting!");
843+*/
844+ You_see("床の一部が溶けているのを見た!");
824845 } else if (inpack) {
846+/*JP
825847 Your("pack reaches out and grabs something!");
848+*/
849+ Your("かばんが手を伸ばして何かをつかんだ!");
826850 }
827851 /* even though we can see where they should be,
828852 * they'll be out of our view (minvent or container)
829853 * so don't actually show anything */
830854 } else if (onfloor || inpack) {
855+#if 0 /*JP*/
831856 pline("The %s coalesce%s.", makeplural(obj_typename(otmp->otyp)),
832857 inpack ? " inside your pack" : "");
858+#else
859+ pline("%sが%s合体した.", obj_typename(otmp->otyp),
860+ inpack ? "あなたのかばんの中で" : "");
861+#endif
833862 }
834863 } else {
864+/*JP
835865 You_hear("a faint sloshing sound.");
866+*/
867+ You_hear("かすかなバシャバシャという音を聞いた.");
836868 }
837869 }
838870
--- a/src/polyself.c
+++ b/src/polyself.c
@@ -133,9 +133,16 @@ boolean on;
133133 vulnerable form into another causes the counter to be reset */
134134 if (uamul && uamul->otyp == AMULET_OF_STRANGULATION
135135 && can_be_strangled(&youmonst)) {
136+#if 0 /*JP*/
136137 Your("%s %s your %s!", simpleonames(uamul),
137138 Strangled ? "still constricts" : "begins constricting",
138139 body_part(NECK)); /* "throat" */
140+#else
141+ Your("%s%s%sを絞め%s!", simpleonames(uamul),
142+ Strangled ? "はまだ" : "が",
143+ body_part(NECK),
144+ Strangled ? "ている" : "はじめた");
145+#endif
139146 Strangled = 6L;
140147 makeknown(AMULET_OF_STRANGULATION);
141148 }
@@ -144,7 +151,10 @@ boolean on;
144151 } else {
145152 if (Strangled && !can_be_strangled(&youmonst)) {
146153 Strangled = 0L;
154+/*JP
147155 You("are no longer being strangled.");
156+*/
157+ You("もはや窒息していない.");
148158 }
149159 }
150160 }
@@ -407,7 +417,10 @@ int psflags;
407417 controllable_poly = Polymorph_control && !(Stunned || Unaware);
408418
409419 if (Unchanging) {
420+/*JP
410421 pline("You fail to transform!");
422+*/
423+ pline("あなたは変化に失敗した!");
411424 return;
412425 }
413426 /* being Stunned|Unaware doesn't negate this aspect of Poly_control */
@@ -498,7 +511,10 @@ int psflags;
498511 pm_name = the(pm_name);
499512 else if (!type_is_pname(&mons[mntmp]))
500513 pm_name = an(pm_name);
514+/*JP
501515 You_cant("polymorph into %s.", pm_name);
516+*/
517+ You_cant("%sに変化できない.", pm_name);
502518 } else
503519 break;
504520 } while (--tryct > 0);
@@ -530,13 +546,20 @@ int psflags;
530546 /* similar to noarmor(invent.c),
531547 shorten to "<color> scale mail" */
532548 dsmail = strcpy(buf, simpleonames(uarm));
549+#if 0 /*JP*/
533550 if ((p = strstri(dsmail, " dragon ")) != 0)
534551 while ((p[1] = p[8]) != '\0')
535552 ++p;
553+#endif
536554 /* tricky phrasing; dragon scale mail
537555 is singular, dragon scales are plural */
556+#if 0 /*JP*/
538557 Your("%s reverts to scales as you merge with them.",
539558 dsmail);
559+#else
560+ Your("%sは鱗に戻った.",
561+ dsmail);
562+#endif
540563 /* uarm->spe enchantment remains unchanged;
541564 re-converting scales to mail poses risk
542565 of evaporation due to over enchanting */
@@ -563,7 +586,10 @@ int psflags;
563586 ? PM_WOLF
564587 : !rn2(4) ? PM_FOG_CLOUD : PM_VAMPIRE_BAT;
565588 if (controllable_poly) {
589+/*JP
566590 Sprintf(buf, "Become %s?", an(mons[mntmp].mname));
591+*/
592+ Sprintf(buf, "%sになる?", mons[mntmp].mname);
567593 if (yn(buf) != 'y')
568594 return;
569595 }
@@ -805,9 +831,17 @@ int mntmp;
805831 if (touch_petrifies(u.usteed->data) && !Stone_resistance && rnl(3)) {
806832 char buf[BUFSZ];
807833
834+#if 0 /*JP*/
808835 pline("%s touch %s.", no_longer_petrify_resistant,
809836 mon_nam(u.usteed));
837+#else
838+ pline("%sは%sに触れた.", no_longer_petrify_resistant,
839+ mon_nam(u.usteed));
840+#endif
841+/*JP
810842 Sprintf(buf, "riding %s", an(u.usteed->data->mname));
843+*/
844+ Sprintf(buf, "%sに乗って", u.usteed->data->mname);
811845 instapetrify(buf);
812846 }
813847 if (!can_ride(u.usteed))
@@ -1161,22 +1195,35 @@ int alone;
11611195 candropwep = canletgo(uwep, "");
11621196 candropswapwep = !u.twoweap || canletgo(uswapwep, "");
11631197 if (alone) {
1198+#if 0 /*JP*/
11641199 what = (candropwep && candropswapwep) ? "drop" : "release";
1200+#endif
1201+/*JP
11651202 which = is_sword(uwep) ? "sword" : weapon_descr(uwep);
1203+*/
1204+ which = is_sword(uwep) ? "剣" : weapon_descr(uwep);
11661205 if (u.twoweap) {
11671206 whichtoo =
1207+/*JP
11681208 is_sword(uswapwep) ? "sword" : weapon_descr(uswapwep);
1209+*/
1210+ is_sword(uswapwep) ? "剣" : weapon_descr(uswapwep);
11691211 if (strcmp(which, whichtoo))
1212+/*JP
11701213 which = "weapon";
1214+*/
1215+ which = "武器";
11711216 }
1217+#if 0 /*JP*//*複数形にしない*/
11721218 if (uwep->quan != 1L || u.twoweap)
11731219 which = makeplural(which);
1220+#endif
11741221
11751222 #if 0 /*JP*/
11761223 You("find you must %s %s %s!", what,
11771224 the_your[!!strncmp(which, "corpse", 6)], which);
11781225 #else
1179- You("%sを落としたことに気づいた!", what);
1226+ You("%sを落としたことに気づいた!", which);
11801227 #endif
11811228 }
11821229 if (u.twoweap) {
@@ -1726,12 +1773,21 @@ dohide()
17261773 /* can't hide while being held (or holding) or while trapped
17271774 (except for floor hiders [trapper or mimic] in pits) */
17281775 if (u.ustuck || (u.utrap && (u.utraptype != TT_PIT || on_ceiling))) {
1776+#if 0 /*JP*/
17291777 You_cant("hide while you're %s.",
17301778 !u.ustuck ? "trapped" : !sticks(youmonst.data)
17311779 ? "being held"
17321780 : humanoid(u.ustuck->data)
17331781 ? "holding someone"
17341782 : "holding that creature");
1783+#else
1784+ You_cant("%s間は隠れられない.",
1785+ !u.ustuck ? "捕まっている" : !sticks(youmonst.data)
1786+ ? "捕まえられている"
1787+ : humanoid(u.ustuck->data)
1788+ ? "誰かをつかんでいる"
1789+ : "怪物をつかんでいる");
1790+#endif
17351791 if (u.uundetected
17361792 || (ismimic && youmonst.m_ap_type != M_AP_NOTHING)) {
17371793 u.uundetected = 0;
@@ -1744,26 +1800,41 @@ dohide()
17441800 such critters aren't offered the option of hiding via #monster */
17451801 if (youmonst.data->mlet == S_EEL && !is_pool(u.ux, u.uy)) {
17461802 if (IS_FOUNTAIN(levl[u.ux][u.uy].typ))
1803+/*JP
17471804 The("fountain is not deep enough to hide in.");
1805+*/
1806+ The("泉は隠れられるほど深くない.");
17481807 else
1808+/*JP
17491809 There("is no water to hide in here.");
1810+*/
1811+ There("ここには隠れるための水がない.");
17501812 u.uundetected = 0;
17511813 return 0;
17521814 }
17531815 if (hides_under(youmonst.data) && !level.objects[u.ux][u.uy]) {
1816+/*JP
17541817 There("is nothing to hide under here.");
1818+*/
1819+ There("ここには隠れられるものがない.");
17551820 u.uundetected = 0;
17561821 return 0;
17571822 }
17581823 /* Planes of Air and Water */
17591824 if (on_ceiling && !has_ceiling(&u.uz)) {
1825+/*JP
17601826 There("is nowhere to hide above you.");
1827+*/
1828+ There("あなたの上には隠れられる場所がない.");
17611829 u.uundetected = 0;
17621830 return 0;
17631831 }
17641832 if ((is_hider(youmonst.data) && !Flying) /* floor hider */
17651833 && (Is_airlevel(&u.uz) || Is_waterlevel(&u.uz))) {
1834+/*JP
17661835 There("is nowhere to hide beneath you.");
1836+*/
1837+ There("あなたの下には隠れられる場所がない.");
17671838 u.uundetected = 0;
17681839 return 0;
17691840 }
@@ -1795,7 +1866,10 @@ dopoly()
17951866 if (is_vampire(youmonst.data)) {
17961867 polyself(2);
17971868 if (savedat != youmonst.data) {
1869+/*JP
17981870 You("transform into %s.", an(youmonst.data->mname));
1871+*/
1872+ You("%sの姿になった.", youmonst.data->mname);
17991873 newsym(u.ux, u.uy);
18001874 }
18011875 }
@@ -2145,7 +2219,10 @@ int part;
21452219 #endif
21462220 }
21472221 if (mptr == &mons[PM_STALKER] && part == HEAD)
2222+/*JP
21482223 return "head";
2224+*/
2225+ return "頭";
21492226 if (mptr->mlet == S_EEL && mptr != &mons[PM_JELLYFISH])
21502227 return fish_parts[part];
21512228 if (mptr->mlet == S_WORM)
--- a/src/potion.c
+++ b/src/potion.c
@@ -484,11 +484,17 @@ boolean talk;
484484
485485 if (!xtime && old) {
486486 if (talk)
487+/*JP
487488 You("can hear again.");
489+*/
490+ You("また聞こえるようになった.");
488491 toggled = TRUE;
489492 } else if (xtime && !old) {
490493 if (talk)
494+/*JP
491495 You("are unable to hear anything.");
496+*/
497+ You("何も聞こえなくなった.");
492498 toggled = TRUE;
493499 }
494500 /* deafness isn't presently shown on status line, but
@@ -1527,7 +1533,10 @@ const char *objphrase; /* "Your widget glows" or "Steed's saddle glows" */
15271533 } else if (potion->cursed) {
15281534 if (targobj->blessed) {
15291535 func = unbless;
1536+/*JP
15301537 glowcolor = "brown";
1538+*/
1539+ glowcolor = "茶色の";
15311540 costchange = COST_UNBLSS;
15321541 } else if (!targobj->cursed) {
15331542 func = curse;
@@ -1549,10 +1558,19 @@ const char *objphrase; /* "Your widget glows" or "Steed's saddle glows" */
15491558 is cleared instead of set if perception is distorted */
15501559 if (useeit) {
15511560 glowcolor = hcolor(glowcolor);
1561+ /*JP:3.6.0時点では動詞は"glow"だけなので決め撃ち*/
15521562 if (altfmt)
1563+#if 0 /*JP*/
15531564 pline("%s with %s aura.", objphrase, an(glowcolor));
1565+#else
1566+ pline("%sは%sオーラにつつまれた.", objphrase, glowcolor);
1567+#endif
15541568 else
1569+#if 0 /*JP*/
15551570 pline("%s %s.", objphrase, glowcolor);
1571+#else
1572+ pline("%sは%s輝いた.", objphrase, jconj_adj(glowcolor));
1573+#endif
15561574 iflags.last_msg = PLNMSG_OBJ_GLOWS;
15571575 targobj->bknown = !Hallucination;
15581576 }
@@ -1702,7 +1720,10 @@ boolean your_fault;
17021720
17031721 switch (obj->otyp) {
17041722 case POT_WATER:
1723+/*JP
17051724 Sprintf(saddle_glows, "%s %s", buf, aobjnam(saddle, "glow"));
1725+*/
1726+ Sprintf(saddle_glows, "%s", buf);
17061727 affected = H2Opotion_dip(obj, saddle, useeit, saddle_glows);
17071728 break;
17081729 case POT_POLYMORPH:
@@ -1710,7 +1731,10 @@ boolean your_fault;
17101731 break;
17111732 }
17121733 if (useeit && !affected)
1734+/*JP
17131735 pline("%s %s wet.", buf, aobjnam(saddle, "get"));
1736+*/
1737+ pline("%sは濡れた.", buf);
17141738 } else {
17151739 boolean angermon = TRUE;
17161740
@@ -2233,8 +2257,8 @@ dodip()
22332257
22342258 #if 0 /*JP*/
22352259 Sprintf(qbuf, "dip %s into", thesimpleoname(obj));
2236-#else
2237- Sprintf(qbuf, "%sを浸しますか", thesimpleoname(obj));
2260+#else /*JP:英語では何を浸すかを含めているが日本語では処理の都合でとりあえず省略*/
2261+ Sprintf(qbuf, "dip into");
22382262 #endif
22392263 here = levl[u.ux][u.uy].typ;
22402264 /* Is there a fountain to dip into here? */
@@ -2288,7 +2312,11 @@ dodip()
22882312 potion->in_use = TRUE; /* assume it will be used up */
22892313 if (potion->otyp == POT_WATER) {
22902314 boolean useeit = !Blind || (obj == ublindf && Blindfolded_only);
2315+#if 0 /*JP*/
22912316 const char *obj_glows = Yobjnam2(obj, "glow");
2317+#else
2318+ const char *obj_glows = cxname(obj);
2319+#endif
22922320
22932321 if (H2Opotion_dip(potion, obj, useeit, obj_glows))
22942322 goto poof;
@@ -2452,22 +2480,35 @@ dodip()
24522480 been made in order to get the merge result for both cases;
24532481 as a consequence, mixing while Fumbling drops the mixture */
24542482 freeinv(obj);
2483+#if 0 /*JP*/
24552484 (void) hold_another_object(obj, "You drop %s!", doname(obj),
24562485 (const char *) 0);
2486+#else
2487+ (void) hold_another_object(obj, "%sを落した!", doname(obj),
2488+ (const char *) 0);
2489+#endif
24572490 return 1;
24582491 }
24592492
24602493 if (potion->otyp == POT_ACID && obj->otyp == CORPSE
24612494 && obj->corpsenm == PM_LICHEN && !Blind) {
2495+#if 0 /*JP*/
24622496 pline("%s %s %s around the edges.", The(cxname(obj)),
24632497 otense(obj, "turn"),
24642498 potion->odiluted ? hcolor(NH_ORANGE) : hcolor(NH_RED));
2499+#else
2500+ pline("%sはふちが%sなった.", The(cxname(obj)),
2501+ jconj_adj(potion->odiluted ? hcolor(NH_ORANGE) : hcolor(NH_RED)));
2502+#endif
24652503 potion->in_use = FALSE; /* didn't go poof */
24662504 return 1;
24672505 }
24682506
24692507 if (potion->otyp == POT_WATER && obj->otyp == TOWEL) {
2470- pline_The("towel soaks it up!");
2508+/*JP
2509+ pline_The("towel soak up!");
2510+*/
2511+ pline_The("タオルは水を吸い込んだ!");
24712512 /* wetting towel already done via water_damage() in H2Opotion_dip */
24722513 goto poof;
24732514 }
--- a/src/weapon.c
+++ b/src/weapon.c
@@ -119,29 +119,47 @@ struct obj *obj;
119119 case P_SLING:
120120 if (is_ammo(obj))
121121 descr = (obj->otyp == ROCK || is_graystone(obj))
122+/*JP
122123 ? "stone"
124+*/
125+ ? "石"
123126 /* avoid "rock"; what about known glass? */
124127 : (obj->oclass == GEM_CLASS)
128+/*JP
125129 ? "gem"
130+*/
131+ ? "宝石"
126132 /* in case somebody adds odd sling ammo */
127133 : def_oc_syms[(int) obj->oclass].name;
128134 break;
129135 case P_BOW:
130136 if (is_ammo(obj))
137+/*JP
131138 descr = "arrow";
139+*/
140+ descr = "矢";
132141 break;
133142 case P_CROSSBOW:
134143 if (is_ammo(obj))
144+/*JP
135145 descr = "bolt";
146+*/
147+ descr = "ボルト";
136148 break;
137149 case P_FLAIL:
138150 if (obj->otyp == GRAPPLING_HOOK)
151+/*JP
139152 descr = "hook";
153+*/
154+ descr = "フック";
140155 break;
141156 case P_PICK_AXE:
142157 /* even if "dwarvish mattock" hasn't been discovered yet */
143158 if (obj->otyp == DWARVISH_MATTOCK)
159+/*JP
144160 descr = "mattock";
161+*/
162+ descr = "つるはし";
145163 break;
146164 default:
147165 break;