From b4a08af2b1ec56be83280ad12d4359c645b3d0b3 Mon Sep 17 00:00:00 2001 From: Mika Bostrom Date: Sun, 22 Aug 2010 13:09:26 +0300 Subject: [PATCH 01/53] Remove trailing percent symbols from HUD values The values that are displayed in the HUD box included the '%' symbol if these values were percentages. This clutters the HUD for those who don't need such extra characters. This patch removes the trailing '%' from result[1]. The default formatting for HUD values is '%3.1f' and if decimal places need to be changed, the code for those is now simpler. A user who wishes to show a percent symbol after any given stat value, can edit HUD_config.xml and assign such stats the hudsuffix="%" attribute. This patch also changes the way the tooltip strings are constructed. Instead of appending the percent symbol to generated string, the '%' is now generated in place by the format-string stanza '%%'. --- pyfpdb/Stats.py | 457 +++++++++++++++++++++++------------------------- 1 file changed, 221 insertions(+), 236 deletions(-) diff --git a/pyfpdb/Stats.py b/pyfpdb/Stats.py index ffb1e47e..22900da8 100755 --- a/pyfpdb/Stats.py +++ b/pyfpdb/Stats.py @@ -78,7 +78,6 @@ log = logging.getLogger("db") re_Places = re.compile("_[0-9]$") -re_Percent = re.compile("%$") # String manipulation import codecs @@ -88,35 +87,21 @@ def do_tip(widget, tip): _tip = Charset.to_utf8(tip) widget.set_tooltip_text(_tip) + def do_stat(stat_dict, player = 24, stat = 'vpip'): match = re_Places.search(stat) - if match is None: - result = eval("%(stat)s(stat_dict, %(player)d)" % {'stat': stat, 'player': player}) - else: + result = eval("%(stat)s(stat_dict, %(player)d)" % {'stat': stat, 'player': player}) + + # If decimal places have been defined, override result[1] + if match: base = stat[0:-2] places = int(stat[-1:]) - result = (0.0, '0.0', 'notset=0', 'notset=0', '0', 'not set') - try: - result = eval("%(stat)s(stat_dict, %(player)d)" % {'stat': base, 'player': player}) - except: - pass # - log.info(_("exception getting stat %s for player %s %s") % (base, str(player), str(sys.exc_info()))) - log.debug(_("Stats.do_stat result = %s") % str(result) ) - - match = re_Percent.search(result[1]) - try: - if match is None: - result = (result[0], "%.*f" % (places, result[0]), result[2], result[3], result[4], result[5]) - else: - result = (result[0], "%.*f%%" % (places, 100*result[0]), result[2], result[3], result[4], result[5]) - except: - log.info(_("error: %s") % str(sys.exc_info())) - raise + result[1] = '%.*f' % (places, 100.0*result[0]) return result # OK, for reference the tuple returned by the stat is: # 0 - The stat, raw, no formating, eg 0.33333333 -# 1 - formatted stat with appropriate precision and punctuation, eg 33% +# 1 - formatted stat with appropriate precision, eg. 33; shown in HUD # 2 - formatted stat with appropriate precision, punctuation and a hint, eg v=33% # 3 - same as #2 except name of stat instead of hint, eg vpip=33% # 4 - the calculation that got the stat, eg 9/27 @@ -147,17 +132,17 @@ def vpip(stat_dict, player): try: stat = float(stat_dict[player]['vpip'])/float(stat_dict[player]['n']) return (stat, - '%3.1f' % (100*stat) + '%', - 'v=%3.1f' % (100*stat) + '%', - 'vpip=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['vpip'], stat_dict[player]['n']), + '%3.1f' % (100.0*stat), + 'v=%3.1f%%' % (100.0*stat), + 'vpip=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['vpip'], stat_dict[player]['n']), _('Voluntarily Put In Pot Pre-Flop%') ) except: return (stat, - '%3.1f' % (0) + '%', - 'v=%3.1f' % (0) + '%', - 'vpip=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'v=%3.1f%%' % (0), + 'vpip=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('Voluntarily Put In Pot Pre-Flop%') ) @@ -167,18 +152,18 @@ def pfr(stat_dict, player): try: stat = float(stat_dict[player]['pfr'])/float(stat_dict[player]['n']) return (stat, - '%3.1f' % (100*stat) + '%', - 'p=%3.1f' % (100*stat) + '%', - 'pfr=%3.1f' % (100*stat) + '%', + '%3.1f' % (100.0*stat), + 'p=%3.1f%%' % (100.0*stat), + 'pfr=%3.1f%%' % (100.0*stat), '(%d/%d)' % (stat_dict[player]['pfr'], stat_dict[player]['n']), _('Pre-Flop Raise %') ) except: return (stat, - '%3.1f' % (0) + '%', - 'p=%3.1f' % (0) + '%', - 'pfr=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'p=%3.1f%%' % (0), + 'pfr=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('Pre-Flop Raise %') ) @@ -188,18 +173,18 @@ def wtsd(stat_dict, player): try: stat = float(stat_dict[player]['sd'])/float(stat_dict[player]['saw_f']) return (stat, - '%3.1f' % (100*stat) + '%', - 'w=%3.1f' % (100*stat) + '%', - 'wtsd=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['sd'], stat_dict[player]['saw_f']), + '%3.1f' % (100.0*stat), + 'w=%3.1f%%' % (100.0*stat), + 'wtsd=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['sd'], stat_dict[player]['saw_f']), _('% went to showdown') ) except: return (stat, - '%3.1f' % (0) + '%', - 'w=%3.1f' % (0) + '%', - 'wtsd=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'w=%3.1f%%' % (0), + 'wtsd=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('% went to showdown') ) @@ -209,18 +194,18 @@ def wmsd(stat_dict, player): try: stat = float(stat_dict[player]['wmsd'])/float(stat_dict[player]['sd']) return (stat, - '%3.1f' % (100*stat) + '%', - 'w=%3.1f' % (100*stat) + '%', - 'wmsd=%3.1f' % (100*stat) + '%', + '%3.1f' % (100.0*stat), + 'w=%3.1f%%' % (100.0*stat), + 'wmsd=%3.1f%%' % (100.0*stat), '(%5.1f/%d)' % (float(stat_dict[player]['wmsd']), stat_dict[player]['sd']), _('% won money at showdown') ) except: return (stat, - '%3.1f' % (0) + '%', - 'w=%3.1f' % (0) + '%', - 'wmsd=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'w=%3.1f%%' % (0), + 'wmsd=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('% won money at showdown') ) @@ -230,19 +215,19 @@ def profit100(stat_dict, player): try: stat = float(stat_dict[player]['net'])/float(stat_dict[player]['n']) return (stat, - '%.0f' % (100.0*stat), - 'p=%.0f' % (100.0*stat), - 'p/100=%.0f' % (100.0*stat), + '%.0f' % (100.0*stat), + 'p=%.0f' % (100.0*stat), + 'p/100=%.0f' % (100.0*stat), '%d/%d' % (stat_dict[player]['net'], stat_dict[player]['n']), _('profit/100hands') ) except: print _("exception calcing p/100: 100 * %d / %d") % (stat_dict[player]['net'], stat_dict[player]['n']) return (stat, - '%.0f' % (0.0), - 'p=%.0f' % (0.0), - 'p/100=%.0f' % (0.0), - '(%d/%d)' % (0, 0), + '%.0f' % (0.0), + 'p=%.0f' % (0.0), + 'p/100=%.0f' % (0.0), + '(%d/%d)' % (0, 0), _('profit/100hands') ) @@ -252,19 +237,19 @@ def bbper100(stat_dict, player): try: stat = 100.0 * float(stat_dict[player]['net']) / float(stat_dict[player]['bigblind']) return (stat, - '%5.3f' % (stat), - 'bb100=%5.3f' % (stat), - 'bb100=%5.3f' % (stat), - '(%d,%d)' % (100*stat_dict[player]['net'],stat_dict[player]['bigblind']), + '%5.3f' % (stat), + 'bb100=%5.3f' % (stat), + 'bb100=%5.3f' % (stat), + '(%d,%d)' % (100*stat_dict[player]['net'],stat_dict[player]['bigblind']), _('big blinds/100 hands') ) except: log.info("exception calcing bb/100: "+str(stat_dict[player])) return (stat, - '%.0f' % (0), - 'bb100=%.0f' % (0), - 'bb100=%.0f' % (0), - '(%f)' % (0), + '%.0f' % (0), + 'bb100=%.0f' % (0), + 'bb100=%.0f' % (0), + '(%f)' % (0), _('big blinds/100 hands') ) @@ -274,19 +259,19 @@ def BBper100(stat_dict, player): try: stat = 50 * float(stat_dict[player]['net']) / float(stat_dict[player]['bigblind']) return (stat, - '%5.3f' % (stat), - 'BB100=%5.3f' % (stat), - 'BB100=%5.3f' % (stat), - '(%d,%d)' % (100*stat_dict[player]['net'],2*stat_dict[player]['bigblind']), + '%5.3f' % (stat), + 'BB100=%5.3f' % (stat), + 'BB100=%5.3f' % (stat), + '(%d,%d)' % (100*stat_dict[player]['net'],2*stat_dict[player]['bigblind']), _('Big Bets/100 hands') ) except: log.info(_("exception calcing BB/100: ")+str(stat_dict[player])) return (stat, - '%.0f' % (0.0), - 'BB100=%.0f' % (0.0), - 'BB100=%.0f' % (0.0), - '(%f)' % (0.0), + '%.0f' % (0.0), + 'BB100=%.0f' % (0.0), + 'BB100=%.0f' % (0.0), + '(%f)' % (0.0), _('Big Bets/100 hands') ) @@ -297,10 +282,10 @@ def saw_f(stat_dict, player): den = float(stat_dict[player]['n']) stat = num/den return (stat, - '%3.1f' % (100*stat) + '%', - 'sf=%3.1f' % (100*stat) + '%', - 'saw_f=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['saw_f'], stat_dict[player]['n']), + '%3.1f' % (100.0*stat), + 'sf=%3.1f%%' % (100.0*stat), + 'saw_f=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['saw_f'], stat_dict[player]['n']), _('Flop Seen %') ) except: @@ -308,10 +293,10 @@ def saw_f(stat_dict, player): num = 0 den = 0 return (stat, - '%3.1f' % (stat) + '%', - 'sf=%3.1f' % (stat) + '%', - 'saw_f=%3.1f' % (stat) + '%', - '(%d/%d)' % (num, den), + '%3.1f' % (stat), + 'sf=%3.1f%%' % (stat), + 'saw_f=%3.1f%%' % (stat), + '(%d/%d)' % (num, den), _('Flop Seen %') ) @@ -352,18 +337,18 @@ def fold_f(stat_dict, player): try: stat = float(stat_dict[player]['fold_2'])/float(stat_dict[player]['saw_f']) return (stat, - '%3.1f' % (100*stat) + '%', - 'ff=%3.1f' % (100*stat) + '%', - 'fold_f=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['fold_2'], stat_dict[player]['saw_f']), + '%3.1f' % (100.0*stat), + 'ff=%3.1f%%' % (100.0*stat), + 'fold_f=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['fold_2'], stat_dict[player]['saw_f']), _('folded flop/4th') ) except: return (stat, - '%3.1f' % (0) + '%', - 'ff=%3.1f' % (0) + '%', - 'fold_f=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'ff=%3.1f%%' % (0), + 'fold_f=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('folded flop/4th') ) @@ -373,10 +358,10 @@ def steal(stat_dict, player): try: stat = float(stat_dict[player]['steal'])/float(stat_dict[player]['steal_opp']) return (stat, - '%3.1f' % (100*stat) + '%', - 'st=%3.1f' % (100*stat) + '%', - 'steal=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['steal'], stat_dict[player]['steal_opp']), + '%3.1f' % (100.0*stat), + 'st=%3.1f%%' % (100.0*stat), + 'steal=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['steal'], stat_dict[player]['steal_opp']), _('% steal attempted') ) except: @@ -388,10 +373,10 @@ def f_SB_steal(stat_dict, player): try: stat = float(stat_dict[player]['sbnotdef'])/float(stat_dict[player]['sbstolen']) return (stat, - '%3.1f' % (100*stat) + '%', - 'fSB=%3.1f' % (100*stat) + '%', - 'fSB_s=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['sbnotdef'], stat_dict[player]['sbstolen']), + '%3.1f' % (100.0*stat), + 'fSB=%3.1f%%' % (100.0*stat), + 'fSB_s=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['sbnotdef'], stat_dict[player]['sbstolen']), _('% folded SB to steal')) except: return (stat, @@ -407,10 +392,10 @@ def f_BB_steal(stat_dict, player): try: stat = float(stat_dict[player]['bbnotdef'])/float(stat_dict[player]['bbstolen']) return (stat, - '%3.1f' % (100*stat) + '%', - 'fBB=%3.1f' % (100*stat) + '%', - 'fBB_s=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['bbnotdef'], stat_dict[player]['bbstolen']), + '%3.1f' % (100.0*stat), + 'fBB=%3.1f%%' % (100.0*stat), + 'fBB_s=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['bbnotdef'], stat_dict[player]['bbstolen']), _('% folded BB to steal')) except: return (stat, @@ -429,10 +414,10 @@ def f_steal(stat_dict, player): stat = float(folded_blind)/float(blind_stolen) return (stat, - '%3.1f' % (100*stat) + '%', - 'fB=%3.1f' % (100*stat) + '%', - 'fB_s=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (folded_blind, blind_stolen), + '%3.1f' % (100.0*stat), + 'fB=%3.1f%%' % (100.0*stat), + 'fB_s=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (folded_blind, blind_stolen), _('% folded blind to steal')) except: return (stat, @@ -448,17 +433,17 @@ def three_B(stat_dict, player): try: stat = float(stat_dict[player]['tb_0'])/float(stat_dict[player]['tb_opp_0']) return (stat, - '%3.1f' % (100*stat) + '%', - '3B=%3.1f' % (100*stat) + '%', - '3B_pf=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['tb_0'], stat_dict[player]['tb_opp_0']), + '%3.1f' % (100.0*stat), + '3B=%3.1f%%' % (100.0*stat), + '3B_pf=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['tb_0'], stat_dict[player]['tb_opp_0']), _('% 3/4 Bet preflop/3rd')) except: return (stat, - '%3.1f' % (0) + '%', - '3B=%3.1f' % (0) + '%', - '3B_pf=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + '3B=%3.1f%%' % (0), + '3B_pf=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('% 3/4 Bet preflop/3rd')) def WMsF(stat_dict, player): @@ -467,17 +452,17 @@ def WMsF(stat_dict, player): try: stat = float(stat_dict[player]['w_w_s_1'])/float(stat_dict[player]['saw_1']) return (stat, - '%3.1f' % (100*stat) + '%', - 'wf=%3.1f' % (100*stat) + '%', - 'w_w_f=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['w_w_s_1'], stat_dict[player]['saw_f']), + '%3.1f' % (100.0*stat), + 'wf=%3.1f%%' % (100.0*stat), + 'w_w_f=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['w_w_s_1'], stat_dict[player]['saw_f']), _('% won$/saw flop/4th')) except: return (stat, - '%3.1f' % (0) + '%', - 'wf=%3.1f' % (0) + '%', - 'w_w_f=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'wf=%3.1f%%' % (0), + 'w_w_f=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('% won$/saw flop/4th')) def a_freq1(stat_dict, player): @@ -486,17 +471,17 @@ def a_freq1(stat_dict, player): try: stat = float(stat_dict[player]['aggr_1'])/float(stat_dict[player]['saw_f']) return (stat, - '%3.1f' % (100*stat) + '%', - 'a1=%3.1f' % (100*stat) + '%', - 'a_fq_1=%3.1f' % (100*stat) + '%', + '%3.1f' % (100.0*stat), + 'a1=%3.1f%%' % (100.0*stat), + 'a_fq_1=%3.1f%%' % (100.0*stat), '(%d/%d)' % (stat_dict[player]['aggr_1'], stat_dict[player]['saw_f']), _('Aggression Freq flop/4th')) except: return (stat, - '%3.1f' % (0) + '%', - 'a1=%3.1f' % (0) + '%', - 'a_fq_1=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'a1=%3.1f%%' % (0), + 'a_fq_1=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('Aggression Freq flop/4th')) def a_freq2(stat_dict, player): @@ -505,17 +490,17 @@ def a_freq2(stat_dict, player): try: stat = float(stat_dict[player]['aggr_2'])/float(stat_dict[player]['saw_2']) return (stat, - '%3.1f' % (100*stat) + '%', - 'a2=%3.1f' % (100*stat) + '%', - 'a_fq_2=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['aggr_2'], stat_dict[player]['saw_2']), + '%3.1f' % (100.0*stat), + 'a2=%3.1f%%' % (100.0*stat), + 'a_fq_2=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['aggr_2'], stat_dict[player]['saw_2']), _('Aggression Freq turn/5th')) except: return (stat, - '%3.1f' % (0) + '%', - 'a2=%3.1f' % (0) + '%', - 'a_fq_2=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'a2=%3.1f%%' % (0), + 'a_fq_2=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('Aggression Freq turn/5th')) def a_freq3(stat_dict, player): @@ -524,17 +509,17 @@ def a_freq3(stat_dict, player): try: stat = float(stat_dict[player]['aggr_3'])/float(stat_dict[player]['saw_3']) return (stat, - '%3.1f' % (100*stat) + '%', - 'a3=%3.1f' % (100*stat) + '%', - 'a_fq_3=%3.1f' % (100*stat) + '%', + '%3.1f' % (100.0*stat), + 'a3=%3.1f%%' % (100.0*stat), + 'a_fq_3=%3.1f%%' % (100.0*stat), '(%d/%d)' % (stat_dict[player]['aggr_3'], stat_dict[player]['saw_3']), _('Aggression Freq river/6th')) except: return (stat, - '%3.1f' % (0) + '%', - 'a3=%3.1f' % (0) + '%', - 'a_fq_3=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'a3=%3.1f%%' % (0), + 'a_fq_3=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('Aggression Freq river/6th')) def a_freq4(stat_dict, player): @@ -543,17 +528,17 @@ def a_freq4(stat_dict, player): try: stat = float(stat_dict[player]['aggr_4'])/float(stat_dict[player]['saw_4']) return (stat, - '%3.1f' % (100*stat) + '%', - 'a4=%3.1f' % (100*stat) + '%', - 'a_fq_4=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['aggr_4'], stat_dict[player]['saw_4']), + '%3.1f' % (100.0*stat), + 'a4=%3.1f%%' % (100.0*stat), + 'a_fq_4=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['aggr_4'], stat_dict[player]['saw_4']), _('Aggression Freq 7th')) except: return (stat, - '%3.1f' % (0) + '%', - 'a4=%3.1f' % (0) + '%', - 'a_fq_4=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'a4=%3.1f%%' % (0), + 'a_fq_4=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('Aggression Freq 7th')) def a_freq_123(stat_dict, player): @@ -563,9 +548,9 @@ def a_freq_123(stat_dict, player): stat = float( stat_dict[player]['aggr_1'] + stat_dict[player]['aggr_2'] + stat_dict[player]['aggr_3'] ) / float( stat_dict[player]['saw_1'] + stat_dict[player]['saw_2'] + stat_dict[player]['saw_3']); return (stat, - '%3.1f' % (100*stat) + '%', - 'afq=%3.1f' % (100*stat) + '%', - 'postf_aggfq=%3.1f' % (100*stat) + '%', + '%3.1f' % (100.0*stat), + 'afq=%3.1f%%' % (100.0*stat), + 'postf_aggfq=%3.1f%%' % (100.0*stat), '(%d/%d)' % ( stat_dict[player]['aggr_1'] + stat_dict[player]['aggr_2'] + stat_dict[player]['aggr_3'] @@ -576,10 +561,10 @@ def a_freq_123(stat_dict, player): _('Post-Flop Aggression Freq')) except: return (stat, - '%2.0f' % (0) + '%', - 'a3=%2.0f' % (0) + '%', - 'a_fq_3=%2.0f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%2.0f' % (0), + 'a3=%2.0f%%' % (0), + 'a_fq_3=%2.0f%%' % (0), + '(%d/%d)' % (0, 0), _('Post-Flop Aggression Freq')) def agg_freq(stat_dict, player): @@ -597,17 +582,17 @@ def agg_freq(stat_dict, player): stat = float (bet_raise) / float(post_call + post_fold + bet_raise) return (stat, - '%3.1f' % (100*stat) + '%', - 'afr=%3.1f' % (100*stat) + '%', - 'agg_fr=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (bet_raise, (post_call + post_fold + bet_raise)), + '%3.1f' % (100.0*stat), + 'afr=%3.1f%%' % (100.0*stat), + 'agg_fr=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (bet_raise, (post_call + post_fold + bet_raise)), _('Aggression Freq')) except: return (stat, - '%2.1f' % (0) + '%', - 'af=%3.1f' % (0) + '%', - 'agg_f=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%2.1f' % (0), + 'af=%3.1f%%' % (0), + 'agg_f=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('Aggression Freq')) def agg_fact(stat_dict, player): @@ -647,17 +632,17 @@ def cbet(stat_dict, player): oppt = stat_dict[player]['cb_opp_1']+stat_dict[player]['cb_opp_2']+stat_dict[player]['cb_opp_3']+stat_dict[player]['cb_opp_4'] stat = float(cbets)/float(oppt) return (stat, - '%3.1f' % (100*stat) + '%', - 'cbet=%3.1f' % (100*stat) + '%', - 'cbet=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (cbets, oppt), + '%3.1f' % (100.0*stat), + 'cbet=%3.1f%%' % (100.0*stat), + 'cbet=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (cbets, oppt), _('% continuation bet ')) except: return (stat, - '%3.1f' % (0) + '%', - 'cbet=%3.1f' % (0) + '%', - 'cbet=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'cbet=%3.1f%%' % (0), + 'cbet=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('% continuation bet ')) def cb1(stat_dict, player): @@ -666,17 +651,17 @@ def cb1(stat_dict, player): try: stat = float(stat_dict[player]['cb_1'])/float(stat_dict[player]['cb_opp_1']) return (stat, - '%3.1f' % (100*stat) + '%', - 'cb1=%3.1f' % (100*stat) + '%', - 'cb_1=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['cb_1'], stat_dict[player]['cb_opp_1']), + '%3.1f' % (100.0*stat), + 'cb1=%3.1f%%' % (100.0*stat), + 'cb_1=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['cb_1'], stat_dict[player]['cb_opp_1']), _('% continuation bet flop/4th')) except: return (stat, - '%3.1f' % (0) + '%', - 'cb1=%3.1f' % (0) + '%', - 'cb_1=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'cb1=%3.1f%%' % (0), + 'cb_1=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('% continuation bet flop/4th')) def cb2(stat_dict, player): @@ -685,17 +670,17 @@ def cb2(stat_dict, player): try: stat = float(stat_dict[player]['cb_2'])/float(stat_dict[player]['cb_opp_2']) return (stat, - '%3.1f' % (100*stat) + '%', - 'cb2=%3.1f' % (100*stat) + '%', - 'cb_2=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['cb_2'], stat_dict[player]['cb_opp_2']), + '%3.1f' % (100.0*stat), + 'cb2=%3.1f%%' % (100.0*stat), + 'cb_2=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['cb_2'], stat_dict[player]['cb_opp_2']), _('% continuation bet turn/5th')) except: return (stat, - '%3.1f' % (0) + '%', - 'cb2=%3.1f' % (0) + '%', - 'cb_2=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'cb2=%3.1f%%' % (0), + 'cb_2=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('% continuation bet turn/5th')) def cb3(stat_dict, player): @@ -704,17 +689,17 @@ def cb3(stat_dict, player): try: stat = float(stat_dict[player]['cb_3'])/float(stat_dict[player]['cb_opp_3']) return (stat, - '%3.1f' % (100*stat) + '%', - 'cb3=%3.1f' % (100*stat) + '%', - 'cb_3=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['cb_3'], stat_dict[player]['cb_opp_3']), + '%3.1f' % (100.0*stat), + 'cb3=%3.1f%%' % (100.0*stat), + 'cb_3=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['cb_3'], stat_dict[player]['cb_opp_3']), _('% continuation bet river/6th')) except: return (stat, - '%3.1f' % (0) + '%', - 'cb3=%3.1f' % (0) + '%', - 'cb_3=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'cb3=%3.1f%%' % (0), + 'cb_3=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('% continuation bet river/6th')) def cb4(stat_dict, player): @@ -723,17 +708,17 @@ def cb4(stat_dict, player): try: stat = float(stat_dict[player]['cb_4'])/float(stat_dict[player]['cb_opp_4']) return (stat, - '%3.1f' % (100*stat) + '%', - 'cb4=%3.1f' % (100*stat) + '%', - 'cb_4=%3.1f' % (100*stat) + '%', + '%3.1f' % (100.0*stat), + 'cb4=%3.1f%%' % (100.0*stat), + 'cb_4=%3.1f%%' % (100.0*stat), '(%d/%d)' % (stat_dict[player]['cb_4'], stat_dict[player]['cb_opp_4']), _('% continuation bet 7th')) except: return (stat, - '%3.1f' % (0) + '%', - 'cb4=%3.1f' % (0) + '%', - 'cb_4=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'cb4=%3.1f%%' % (0), + 'cb_4=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('% continuation bet 7th')) def ffreq1(stat_dict, player): @@ -742,10 +727,10 @@ def ffreq1(stat_dict, player): try: stat = float(stat_dict[player]['f_freq_1'])/float(stat_dict[player]['was_raised_1']) return (stat, - '%3.1f' % (100*stat) + '%', - 'ff1=%3.1f' % (100*stat) + '%', - 'ff_1=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['f_freq_1'], stat_dict[player]['was_raised_1']), + '%3.1f' % (100.0*stat), + 'ff1=%3.1f%%' % (100.0*stat), + 'ff_1=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['f_freq_1'], stat_dict[player]['was_raised_1']), _('% fold frequency flop/4th')) except: return (stat, @@ -761,17 +746,17 @@ def ffreq2(stat_dict, player): try: stat = float(stat_dict[player]['f_freq_2'])/float(stat_dict[player]['was_raised_2']) return (stat, - '%3.1f' % (100*stat) + '%', - 'ff2=%3.1f' % (100*stat) + '%', - 'ff_2=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['f_freq_2'], stat_dict[player]['was_raised_2']), + '%3.1f' % (100.0*stat), + 'ff2=%3.1f%%' % (100.0*stat), + 'ff_2=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['f_freq_2'], stat_dict[player]['was_raised_2']), _('% fold frequency turn/5th')) except: return (stat, - '%3.1f' % (0) + '%', - 'ff2=%3.1f' % (0) + '%', - 'ff_2=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'ff2=%3.1f%%' % (0), + 'ff_2=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('% fold frequency turn/5th')) def ffreq3(stat_dict, player): @@ -780,17 +765,17 @@ def ffreq3(stat_dict, player): try: stat = float(stat_dict[player]['f_freq_3'])/float(stat_dict[player]['was_raised_3']) return (stat, - '%3.1f' % (100*stat) + '%', - 'ff3=%3.1f' % (100*stat) + '%', - 'ff_3=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['f_freq_3'], stat_dict[player]['was_raised_3']), + '%3.1f' % (100.0*stat), + 'ff3=%3.1f%%' % (100.0*stat), + 'ff_3=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['f_freq_3'], stat_dict[player]['was_raised_3']), _('% fold frequency river/6th')) except: return (stat, - '%3.1f' % (0) + '%', - 'ff3=%3.1f' % (0) + '%', - 'ff_3=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'ff3=%3.1f%%' % (0), + 'ff_3=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('% fold frequency river/6th')) def ffreq4(stat_dict, player): @@ -799,24 +784,24 @@ def ffreq4(stat_dict, player): try: stat = float(stat_dict[player]['f_freq_4'])/float(stat_dict[player]['was_raised_4']) return (stat, - '%3.1f' % (100*stat) + '%', - 'ff4=%3.1f' % (100*stat) + '%', - 'ff_4=%3.1f' % (100*stat) + '%', - '(%d/%d)' % (stat_dict[player]['f_freq_4'], stat_dict[player]['was_raised_4']), + '%3.1f' % (100.0*stat), + 'ff4=%3.1f%%' % (100.0*stat), + 'ff_4=%3.1f%%' % (100.0*stat), + '(%d/%d)' % (stat_dict[player]['f_freq_4'], stat_dict[player]['was_raised_4']), _('% fold frequency 7th')) except: return (stat, - '%3.1f' % (0) + '%', - 'ff4=%3.1f' % (0) + '%', - 'ff_4=%3.1f' % (0) + '%', - '(%d/%d)' % (0, 0), + '%3.1f' % (0), + 'ff4=%3.1f%%' % (0), + 'ff_4=%3.1f%%' % (0), + '(%d/%d)' % (0, 0), _('% fold frequency 7th')) if __name__== "__main__": statlist = dir() misslist = [ "Configuration", "Database", "Charset", "codecs", "encoder" , "do_stat", "do_tip", "GInitiallyUnowned", "gtk", "pygtk" - , "re", "re_Percent", "re_Places" + , "re", "re_Places" ] statlist = [ x for x in statlist if x not in dir(sys) ] statlist = [ x for x in statlist if x not in dir(codecs) ] From 4a92638941eb105ab80ca3c1a1ecc41f5d18bf14 Mon Sep 17 00:00:00 2001 From: Mika Bostrom Date: Sun, 22 Aug 2010 13:57:01 +0300 Subject: [PATCH 02/53] Return "hard" NA for missing/incalculable stats It makes very little sense to do a format string for nothing but zeroes in case of unknown values. Simply return a set of 'NA' strings in place of usual stats. This makes the error cases consistent throughout Stats.py --- pyfpdb/Stats.py | 211 ++++++++++++++++++++++++------------------------ 1 file changed, 105 insertions(+), 106 deletions(-) diff --git a/pyfpdb/Stats.py b/pyfpdb/Stats.py index 22900da8..cfe82f0a 100755 --- a/pyfpdb/Stats.py +++ b/pyfpdb/Stats.py @@ -139,10 +139,10 @@ def vpip(stat_dict, player): _('Voluntarily Put In Pot Pre-Flop%') ) except: return (stat, - '%3.1f' % (0), - 'v=%3.1f%%' % (0), - 'vpip=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'v=NA', + 'vpip=NA', + '(0/0)', _('Voluntarily Put In Pot Pre-Flop%') ) @@ -160,10 +160,10 @@ def pfr(stat_dict, player): ) except: return (stat, - '%3.1f' % (0), - 'p=%3.1f%%' % (0), - 'pfr=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'p=NA', + 'pfr=NA', + '(0/0)', _('Pre-Flop Raise %') ) @@ -181,10 +181,10 @@ def wtsd(stat_dict, player): ) except: return (stat, - '%3.1f' % (0), - 'w=%3.1f%%' % (0), - 'wtsd=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'w=NA', + 'wtsd=NA', + '(0/0)', _('% went to showdown') ) @@ -202,10 +202,10 @@ def wmsd(stat_dict, player): ) except: return (stat, - '%3.1f' % (0), - 'w=%3.1f%%' % (0), - 'wmsd=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'w=NA', + 'wmsd=NA', + '(0/0)', _('% won money at showdown') ) @@ -224,10 +224,10 @@ def profit100(stat_dict, player): except: print _("exception calcing p/100: 100 * %d / %d") % (stat_dict[player]['net'], stat_dict[player]['n']) return (stat, - '%.0f' % (0.0), - 'p=%.0f' % (0.0), - 'p/100=%.0f' % (0.0), - '(%d/%d)' % (0, 0), + 'NA', + 'p=NA', + 'p/100=NA', + '(0/0)', _('profit/100hands') ) @@ -246,10 +246,10 @@ def bbper100(stat_dict, player): except: log.info("exception calcing bb/100: "+str(stat_dict[player])) return (stat, - '%.0f' % (0), - 'bb100=%.0f' % (0), - 'bb100=%.0f' % (0), - '(%f)' % (0), + 'NA', + 'bb100=NA', + 'bb100=NA', + '(--)', _('big blinds/100 hands') ) @@ -268,10 +268,10 @@ def BBper100(stat_dict, player): except: log.info(_("exception calcing BB/100: ")+str(stat_dict[player])) return (stat, - '%.0f' % (0.0), - 'BB100=%.0f' % (0.0), - 'BB100=%.0f' % (0.0), - '(%f)' % (0.0), + 'NA', + 'BB100=NA', + 'BB100=NA', + '(--)', _('Big Bets/100 hands') ) @@ -290,13 +290,11 @@ def saw_f(stat_dict, player): ) except: stat = 0.0 - num = 0 - den = 0 return (stat, - '%3.1f' % (stat), - 'sf=%3.1f%%' % (stat), - 'saw_f=%3.1f%%' % (stat), - '(%d/%d)' % (num, den), + 'NA', + 'sf=NA', + 'saw_f=NA', + '(0/0)', _('Flop Seen %') ) @@ -323,6 +321,7 @@ def n(stat_dict, player): _('number hands seen') ) except: + # Number of hands shouldn't ever be "NA"; zeroes are better here return (0, '%d' % (0), 'n=%d' % (0), @@ -345,10 +344,10 @@ def fold_f(stat_dict, player): ) except: return (stat, - '%3.1f' % (0), - 'ff=%3.1f%%' % (0), - 'fold_f=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'ff=NA', + 'fold_f=NA', + '(0/0)', _('folded flop/4th') ) @@ -440,10 +439,10 @@ def three_B(stat_dict, player): _('% 3/4 Bet preflop/3rd')) except: return (stat, - '%3.1f' % (0), - '3B=%3.1f%%' % (0), - '3B_pf=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + '3B=NA', + '3B_pf=NA', + '(0/0)', _('% 3/4 Bet preflop/3rd')) def WMsF(stat_dict, player): @@ -459,10 +458,10 @@ def WMsF(stat_dict, player): _('% won$/saw flop/4th')) except: return (stat, - '%3.1f' % (0), - 'wf=%3.1f%%' % (0), - 'w_w_f=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'wf=NA', + 'w_w_f=NA', + '(0/0)', _('% won$/saw flop/4th')) def a_freq1(stat_dict, player): @@ -478,10 +477,10 @@ def a_freq1(stat_dict, player): _('Aggression Freq flop/4th')) except: return (stat, - '%3.1f' % (0), - 'a1=%3.1f%%' % (0), - 'a_fq_1=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'a1=NA', + 'a_fq_1=NA', + '(0/0)', _('Aggression Freq flop/4th')) def a_freq2(stat_dict, player): @@ -497,10 +496,10 @@ def a_freq2(stat_dict, player): _('Aggression Freq turn/5th')) except: return (stat, - '%3.1f' % (0), - 'a2=%3.1f%%' % (0), - 'a_fq_2=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'a2=NA', + 'a_fq_2=NA', + '(0/0)', _('Aggression Freq turn/5th')) def a_freq3(stat_dict, player): @@ -516,10 +515,10 @@ def a_freq3(stat_dict, player): _('Aggression Freq river/6th')) except: return (stat, - '%3.1f' % (0), - 'a3=%3.1f%%' % (0), - 'a_fq_3=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'a3=NA', + 'a_fq_3=NA', + '(0/0)', _('Aggression Freq river/6th')) def a_freq4(stat_dict, player): @@ -535,10 +534,10 @@ def a_freq4(stat_dict, player): _('Aggression Freq 7th')) except: return (stat, - '%3.1f' % (0), - 'a4=%3.1f%%' % (0), - 'a_fq_4=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'a4=NA', + 'a_fq_4=NA', + '(0/0)', _('Aggression Freq 7th')) def a_freq_123(stat_dict, player): @@ -561,10 +560,10 @@ def a_freq_123(stat_dict, player): _('Post-Flop Aggression Freq')) except: return (stat, - '%2.0f' % (0), - 'a3=%2.0f%%' % (0), - 'a_fq_3=%2.0f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'a3=NA', + 'a_fq_3=NA', + '(0/0)', _('Post-Flop Aggression Freq')) def agg_freq(stat_dict, player): @@ -589,10 +588,10 @@ def agg_freq(stat_dict, player): _('Aggression Freq')) except: return (stat, - '%2.1f' % (0), - 'af=%3.1f%%' % (0), - 'agg_f=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'af=NA', + 'agg_f=NA', + '(0/0)', _('Aggression Freq')) def agg_fact(stat_dict, player): @@ -615,10 +614,10 @@ def agg_fact(stat_dict, player): _('Aggression Factor')) except: return (stat, - '%2.2f' % (0) , - 'afa=%2.2f' % (0) , - 'agg_fa=%2.2f' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'afa=NA', + 'agg_fa=NA', + '(0/0)', _('Aggression Factor')) def cbet(stat_dict, player): @@ -639,10 +638,10 @@ def cbet(stat_dict, player): _('% continuation bet ')) except: return (stat, - '%3.1f' % (0), - 'cbet=%3.1f%%' % (0), - 'cbet=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'cbet=NA', + 'cbet=NA', + '(0/0)', _('% continuation bet ')) def cb1(stat_dict, player): @@ -658,10 +657,10 @@ def cb1(stat_dict, player): _('% continuation bet flop/4th')) except: return (stat, - '%3.1f' % (0), - 'cb1=%3.1f%%' % (0), - 'cb_1=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'cb1=NA', + 'cb_1=NA', + '(0/0)', _('% continuation bet flop/4th')) def cb2(stat_dict, player): @@ -677,10 +676,10 @@ def cb2(stat_dict, player): _('% continuation bet turn/5th')) except: return (stat, - '%3.1f' % (0), - 'cb2=%3.1f%%' % (0), - 'cb_2=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'cb2=NA', + 'cb_2=NA', + '(0/0)', _('% continuation bet turn/5th')) def cb3(stat_dict, player): @@ -696,10 +695,10 @@ def cb3(stat_dict, player): _('% continuation bet river/6th')) except: return (stat, - '%3.1f' % (0), - 'cb3=%3.1f%%' % (0), - 'cb_3=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'cb3=NA', + 'cb_3=NA', + '(0/0)', _('% continuation bet river/6th')) def cb4(stat_dict, player): @@ -715,10 +714,10 @@ def cb4(stat_dict, player): _('% continuation bet 7th')) except: return (stat, - '%3.1f' % (0), - 'cb4=%3.1f%%' % (0), - 'cb_4=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'cb4=NA', + 'cb_4=NA', + '(0/0)', _('% continuation bet 7th')) def ffreq1(stat_dict, player): @@ -753,10 +752,10 @@ def ffreq2(stat_dict, player): _('% fold frequency turn/5th')) except: return (stat, - '%3.1f' % (0), - 'ff2=%3.1f%%' % (0), - 'ff_2=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'ff2=NA', + 'ff_2=NA', + '(0/0)', _('% fold frequency turn/5th')) def ffreq3(stat_dict, player): @@ -772,10 +771,10 @@ def ffreq3(stat_dict, player): _('% fold frequency river/6th')) except: return (stat, - '%3.1f' % (0), - 'ff3=%3.1f%%' % (0), - 'ff_3=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'ff3=NA', + 'ff_3=NA', + '(0/0)', _('% fold frequency river/6th')) def ffreq4(stat_dict, player): @@ -791,10 +790,10 @@ def ffreq4(stat_dict, player): _('% fold frequency 7th')) except: return (stat, - '%3.1f' % (0), - 'ff4=%3.1f%%' % (0), - 'ff_4=%3.1f%%' % (0), - '(%d/%d)' % (0, 0), + 'NA', + 'ff4=NA', + 'ff_4=NA', + '(0/0)', _('% fold frequency 7th')) if __name__== "__main__": From d2483b88665b1ea4ff5fcb49143b5ab31cd5d4eb Mon Sep 17 00:00:00 2001 From: Mika Bostrom Date: Sun, 22 Aug 2010 14:12:29 +0300 Subject: [PATCH 03/53] Add comment on decimal place override --- pyfpdb/Stats.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pyfpdb/Stats.py b/pyfpdb/Stats.py index cfe82f0a..285a45ea 100755 --- a/pyfpdb/Stats.py +++ b/pyfpdb/Stats.py @@ -93,6 +93,11 @@ def do_stat(stat_dict, player = 24, stat = 'vpip'): result = eval("%(stat)s(stat_dict, %(player)d)" % {'stat': stat, 'player': player}) # If decimal places have been defined, override result[1] + # NOTE: decimal place override ALWAYS assumes the raw result is a + # fraction (x/100); manual decimal places really only make sense for + # percentage values. Also, profit/100 hands (bb/BB) already default + # to three decimal places anyhow, so they are unlikely override + # candidates. if match: base = stat[0:-2] places = int(stat[-1:]) From 08eaed1e5d1eb7fbff115ce9395f11986939ad1f Mon Sep 17 00:00:00 2001 From: sqlcoder Date: Sun, 22 Aug 2010 12:35:51 +0100 Subject: [PATCH 04/53] refine layout and create an 'add' button (no code behind the button yet) --- pyfpdb/GuiDatabase.py | 62 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 55 insertions(+), 7 deletions(-) diff --git a/pyfpdb/GuiDatabase.py b/pyfpdb/GuiDatabase.py index 0f7cdab1..ceea6dfd 100755 --- a/pyfpdb/GuiDatabase.py +++ b/pyfpdb/GuiDatabase.py @@ -79,8 +79,17 @@ class GuiDatabase: try: #self.dia.set_modal(True) self.vbox = self.dia.vbox + self.action_area = self.dia.action_area #gtk.Widget.set_size_request(self.vbox, 700, 400); + h = gtk.HBox(False, spacing=3) + h.show() + self.vbox.pack_start(h, padding=3) + + vbtn = gtk.VBox(True, spacing=3) + vbtn.show() + h.pack_start(vbtn, expand=False, fill=False, padding=2) + # list of databases in self.config.supported_databases: self.liststore = gtk.ListStore(str, str, str, str, str ,str, str, str, str, str) @@ -101,12 +110,28 @@ class GuiDatabase: self.scrolledwindow = gtk.ScrolledWindow() self.scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.scrolledwindow.add(self.listview) - self.vbox.pack_start(self.scrolledwindow, expand=True, fill=True, padding=0) + h.pack_start(self.scrolledwindow, expand=True, fill=True, padding=0) - refreshbutton = gtk.Button(_("Refresh")) - refreshbutton.connect("clicked", self.refresh, None) - self.vbox.pack_start(refreshbutton, False, False, 3) - refreshbutton.show() + # to change label on buttons: + # ( see http://faq.pygtk.org/index.py?req=show&file=faq09.005.htp ) + gtk.stock_add([(gtk.STOCK_ADD, _("Add"), 0, 0, "")]) + + # alternatively: + # button = gtk.Button(stock=gtk.STOCK_CANCEL) + # button.show() + # alignment = button.get_children()[0] + # hbox = alignment.get_children()[0] + # image, label = hbox.get_children() + # label.set_text('Hide') + + + add_button = self.makeSideButton(_("Add"), gtk.STOCK_ADD) + add_button.connect("clicked", self.addDB, None) + vbtn.pack_start(add_button, False, False, 3) + + refresh_button = self.makeSideButton(_("Refresh"), gtk.STOCK_REFRESH) + refresh_button.connect("clicked", self.refresh, None) + vbtn.pack_start(refresh_button, False, False, 3) col = self.addTextColumn(_("Type"), 0, False) col = self.addTextColumn(_("Name"), 1, False) @@ -122,6 +147,7 @@ class GuiDatabase: self.listview.add_events(gtk.gdk.BUTTON_PRESS_MASK) self.listview.connect('button_press_event', self.selectTest) + self.dia.show_all() self.loadDbs() #self.dia.connect('response', self.dialog_response_cb) @@ -129,6 +155,25 @@ class GuiDatabase: err = traceback.extract_tb(sys.exc_info()[2])[-1] print 'guidbmaint: '+ err[2] + "(" + str(err[1]) + "): " + str(sys.exc_info()[1]) + def makeSideButton(self, label, stock): + gtk.stock_add([(gtk.STOCK_REFRESH, _("Refresh"), 0, 0, "")]) + + button = gtk.Button(stock=stock) + alignment = button.get_children()[0] + hbox = alignment.get_children()[0] + image, label = hbox.get_children() + #label.set_text('Hide') + hbox.remove(image) + hbox.remove(label) + v = gtk.VBox(False, spacing=3) + v.pack_start(image, 3) + v.pack_start(label, 3) + alignment.remove(hbox) + alignment.add(v) + button.show_all() + + return(button) + def dialog_response_cb(self, dialog, response_id): # this is called whether close button is pressed or window is closed log.info('dialog_response_cb: response_id='+str(response_id)) @@ -250,7 +295,7 @@ class GuiDatabase: #self.listcols = [] dia = self.info_box2(None, _('Testing database connections ... '), "", False, False) while gtk.events_pending(): - gtk.mainiteration() + gtk.main_iteration() try: # want to fill: dbms, name, comment, user, passwd, host, default, status, icon @@ -356,6 +401,9 @@ class GuiDatabase: def refresh(self, widget, data): self.loadDbs() + def addDB(self, widget, data): + pass + def info_box(self, dia, str1, str2, run, destroy): if dia is None: #if run: @@ -394,7 +442,7 @@ class GuiDatabase: # messagedialog puts text in inverse colors if no buttons are displayed?? #dia = gtk.MessageDialog( parent=self.main_window, flags=gtk.DIALOG_DESTROY_WITH_PARENT # , type=gtk.MESSAGE_INFO, buttons=(btns), message_format=str1 ) - dia = gtk.Dialog( parent=self.main_window, flags=gtk.DIALOG_DESTROY_WITH_PARENT + dia = gtk.Dialog( parent=self.dia, flags=gtk.DIALOG_DESTROY_WITH_PARENT , title="" ) # , buttons=btns vbox = dia.vbox From d85358483bb76bb912b190939d7bbf106585a62e Mon Sep 17 00:00:00 2001 From: Mika Bostrom Date: Wed, 25 Aug 2010 10:06:06 +0300 Subject: [PATCH 05/53] Update changelog --- packaging/debian/changelog | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packaging/debian/changelog b/packaging/debian/changelog index 49211161..29aa5e79 100644 --- a/packaging/debian/changelog +++ b/packaging/debian/changelog @@ -1,3 +1,10 @@ +free-poker-tools (0.20.905-1) unstable; urgency=low + + * New snapshot + * Hungarian translation + + -- Mika Bostrom Wed, 25 Aug 2010 10:05:36 +0300 + free-poker-tools (0.20.904-2) unstable; urgency=low * On fpdb start, copy example HUD_config.xml in place if none is present From 4954299061ec4c08a1e72f8ee86dd2c9e8775690 Mon Sep 17 00:00:00 2001 From: sqlcoder Date: Thu, 26 Aug 2010 21:24:40 +0100 Subject: [PATCH 06/53] add default attribute to appropriate database element if missing --- pyfpdb/Configuration.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pyfpdb/Configuration.py b/pyfpdb/Configuration.py index 29b74b54..1349581d 100755 --- a/pyfpdb/Configuration.py +++ b/pyfpdb/Configuration.py @@ -688,6 +688,7 @@ class Config: raise ValueError("Database names must be unique") if self.db_selected is None or db.db_selected: self.db_selected = db.db_name + db_node.setAttribute("default", "True") self.supported_databases[db.db_name] = db #TODO: if the user may passes '' (empty string) as database name via command line, his choice is ignored # ..when we parse the xml we allow for ''. there has to be a decission if to allow '' or not @@ -972,9 +973,10 @@ class Config: if db_user is not None: db_node.setAttribute("db_user", db_user) if db_pass is not None: db_node.setAttribute("db_pass", db_pass) if db_server is not None: db_node.setAttribute("db_server", db_server) - if defaultb: db_node.setAttribute("default", default) + if defaultb or self.db_selected == db_name: + db_node.setAttribute("default", True) elif db_node.hasAttribute("default"): - db_node.removeAttribute("default") + db_node.removeAttribute("default") if self.supported_databases.has_key(db_name): if db_desc is not None: self.supported_databases[db_name].dp_desc = db_desc if db_ip is not None: self.supported_databases[db_name].dp_ip = db_ip From c664dfbbe339725113585770171810d2502b925a Mon Sep 17 00:00:00 2001 From: Eratosthenes Date: Thu, 26 Aug 2010 22:47:30 -0400 Subject: [PATCH 07/53] Get rid of obsolete import of obsolete Tables.py. --- pyfpdb/Hud.py | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/pyfpdb/Hud.py b/pyfpdb/Hud.py index c394108c..99b65c00 100644 --- a/pyfpdb/Hud.py +++ b/pyfpdb/Hud.py @@ -55,7 +55,6 @@ else: def _(string): return string # FreePokerTools modules -import Tables # needed for testing only import Configuration import Stats import Mucked @@ -941,26 +940,3 @@ class Popup_window: # window.present() -if __name__== "__main__": - main_window = gtk.Window() - main_window.connect("destroy", destroy) - label = gtk.Label(_('Fake main window, blah blah, blah\nblah, blah')) - main_window.add(label) - main_window.show_all() - - c = Configuration.Config() - #tables = Tables.discover(c) - t = Tables.discover_table_by_name(c, "Corona") - if t is None: - print _("Table not found.") - db = Database.Database(c, 'fpdb', 'holdem') - - stat_dict = db.get_stats_from_hand(1) - -# for t in tables: - win = Hud(None, t, 10, 'holdem', c, db) # parent, table, max, poker_game, config, db_connection - win.create(1, c, stat_dict, None) # hand, config, stat_dict, cards): -# t.get_details() - win.update(8300, c) # self, hand, config): - - gtk.main() From 96d1ffe4fa47b283bcd40c63ec8cb882b55d42b8 Mon Sep 17 00:00:00 2001 From: Eratosthenes Date: Thu, 26 Aug 2010 22:48:06 -0400 Subject: [PATCH 08/53] Remove obsolete and unused Tables.py. --- pyfpdb/Tables.py | 449 ----------------------------------------------- 1 file changed, 449 deletions(-) delete mode 100755 pyfpdb/Tables.py diff --git a/pyfpdb/Tables.py b/pyfpdb/Tables.py deleted file mode 100755 index 3ffc7d1a..00000000 --- a/pyfpdb/Tables.py +++ /dev/null @@ -1,449 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -"""Discover_Tables.py - -Inspects the currently open windows and finds those of interest to us--that is -poker table windows from supported sites. Returns a list -of Table_Window objects representing the windows found. -""" -# Copyright 2008-2010, Ray E. Barker - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -######################################################################## - -# Standard Library modules -import os -import sys -import re - -import locale -lang=locale.getdefaultlocale()[0][0:2] -if lang=="en": - def _(string): return string -else: - import gettext - try: - trans = gettext.translation("fpdb", localedir="locale", languages=[lang]) - trans.install() - except IOError: - def _(string): return string - -# Win32 modules -if os.name == 'nt': - import win32gui - import win32process - import win32api - import win32con - import win32security - -# FreePokerTools modules -import Configuration - -# Each TableWindow object must have the following attributes correctly populated: -# tw.name = the table name from the title bar, which must to match the table name -# from the corresponding hand history. -# tw.site = the site name, e.g. PokerStars, FullTilt. This must match the site -# name specified in the config file. -# tw.number = This is the system id number for the client table window in the -# format that the system presents it. This is Xid in Xwindows and -# hwnd in Microsoft Windows. -# tw.title = The full title from the window title bar. -# tw.width, tw.height = The width and height of the window in pixels. This is -# the internal width and height, not including the title bar and -# window borders. -# tw.x, tw.y = The x, y (horizontal, vertical) location of the window relative -# to the top left of the display screen. This also does not include the -# title bar and window borders. To put it another way, this is the -# screen location of (0, 0) in the working window. - -class Table_Window: - def __init__(self, info = {}): - if 'number' in info: self.number = info['number'] - if 'exe' in info: self.exe = info['exe'] - if 'width' in info: self.width = info['width'] - if 'height' in info: self.height = info['height'] - if 'x' in info: self.x = info['x'] - if 'y' in info: self.y = info['y'] - if 'site' in info: self.site = info['site'] - if 'title' in info: self.title = info['title'] - if 'name' in info: self.name = info['name'] - self.gdkhandle = None - - def __str__(self): -# __str__ method for testing - temp = 'TableWindow object\n' - temp = temp + " name = %s\n site = %s\n number = %s\n title = %s\n" % (self.name, self.site, self.number, self.title) -# temp = temp + " game = %s\n structure = %s\n max = %s\n" % (self.game, self.structure, self.max) - temp = temp + " width = %d\n height = %d\n x = %d\n y = %d\n" % (self.width, self.height, self.x, self.y) - if getattr(self, 'tournament', 0): - temp = temp + " tournament = %d\n table = %d" % (self.tournament, self.table) - return temp - -############################################################################ -# Top-level discovery routines--these are the modules interface -def discover(c): - """Dispatch routine for finding all potential poker client windows.""" - if os.name == 'posix': - tables = discover_posix(c) - elif os.name == 'nt': - tables = discover_nt(c) - elif os.name == 'mac': - tables = discover_mac(c) - else: - tables = {} - return tables - -def discover_table_by_name(c, tablename): - """Dispatch routine for finding poker client windows with the given name.""" - if os.name == 'posix': - info = discover_posix_by_name(c, tablename) - elif os.name == 'nt': - info = discover_nt_by_name(c, tablename) - elif os.name == 'mac': - info = discover_mac_by_name(c, tablename) - else: - return None - if info is None: - return None - return Table_Window(info) - -def discover_tournament_table(c, tour_number, tab_number): - """Dispatch routine for finding poker clients with tour and table number.""" - if os.name == 'posix': - info = discover_posix_tournament(c, tour_number, tab_number) - elif os.name == 'nt': - info = discover_nt_tournament(c, tour_number, tab_number) - elif os.name == 'mac': - info = discover_mac_tournament(c, tour_number, tab_number) - else: - return None - if info: - return Table_Window(info) - return None - -############################################################################# -# Posix (= XWindows) specific routines -def discover_posix(c): - """Poker client table window finder for posix/Linux = XWindows.""" - tables = {} - for listing in os.popen('xwininfo -root -tree').readlines(): -# xwininfo -root -tree -id 0xnnnnn gets the info on a single window - for s in c.get_supported_sites(): - params = c.get_site_parameters(s) - -# TODO: We need to make a list of phrases, shared between the WIndows and Unix code!!!!!! - if re.search(params['table_finder'], listing): - if 'Lobby' in listing: continue - if 'Instant Hand History' in listing: continue -# if '\"Full Tilt Poker\"' in listing: continue - if 'History for table:' in listing: continue - if 'has no name' in listing: continue - info = decode_xwininfo(c, listing) - if info['site'] is None: continue - if info['title'] == info['exe']: continue -# this appears to be a poker client, so make a table object for it - tw = Table_Window(info) - eval("%s(tw)" % params['decoder']) - tables[tw.name] = tw - return tables - -def discover_posix_by_name(c, tablename): - """Find an XWindows poker client of the given name.""" - for listing in os.popen('xwininfo -root -tree').readlines(): - if tablename in listing: - if 'History for table:' in listing: continue - info = decode_xwininfo(c, listing) - if not info['name'] == tablename: continue - return info - return None - -def discover_posix_tournament(c, t_number, s_number): - """Finds the X window for a client, given tournament and table nos.""" - search_string = "%s.+Table.+%s" % (t_number, s_number) - for listing in os.popen('xwininfo -root -tree').readlines(): - if re.search(search_string, listing): - return decode_xwininfo(c, listing) - return None - -def decode_xwininfo(c, info_string): - """Gets window parameters from xwinifo string--XWindows.""" - info = {} - mo = re.match('\s+([\dxabcdef]+) (.+):\s\(\"([a-zA-Z.]+)\".+ (\d+)x(\d+)\+\d+\+\d+ \+(\d+)\+(\d+)', info_string) - if not mo: - return None - else: - info['number'] = int( mo.group(1), 0) - info['exe'] = mo.group(3) - info['width'] = int( mo.group(4) ) - info['height'] = int( mo.group(5) ) - info['x'] = int( mo.group(6) ) - info['y'] = int( mo.group(7) ) - info['site'] = get_site_from_exe(c, info['exe']) - info['title'] = re.sub('\"', '', mo.group(2)) - title_bits = re.split(' - ', info['title']) - info['name'] = clean_title(title_bits[0]) - return info - -############################################################################## -# NT (= Windows) specific routines -def discover_nt(c): - """ Poker client table window finder for Windows.""" -# -# I cannot figure out how to get the inside dimensions of the poker table -# windows. So I just assume all borders are 3 thick and all title bars -# are 29 high. No doubt this will be off when used with certain themes. -# - b_width = 3 - tb_height = 29 - titles = {} - tables = {} - win32gui.EnumWindows(win_enum_handler, titles) - for hwnd in titles: - if 'Logged In as' in titles[hwnd] and not 'Lobby' in titles[hwnd]: - if 'Full Tilt Poker' in titles[hwnd]: - continue - tw = Table_Window() - tw.number = hwnd - (x, y, width, height) = win32gui.GetWindowRect(hwnd) - tw.title = titles[hwnd] - tw.width = int( width ) - 2*b_width - tw.height = int( height ) - b_width - tb_height - tw.x = int( x ) + b_width - tw.y = int( y ) + tb_height - -# TODO: Isn't the site being determined by the EXE name it belongs to? is this section of code even useful? cleaning it anyway - if 'Logged In as' in titles[hwnd]: - tw.site = "PokerStars" - elif 'Logged In As' in titles[hwnd]: - tw.site = "Full Tilt" - else: - tw.site = "Unknown" - sys.stderr.write(_("Found unknown table = %s") % tw.title) - if tw.site != "Unknown": - eval("%s(tw)" % c.supported_sites[tw.site].decoder) - else: - tw.name = "Unknown" - tables[len(tables)] = tw - return tables - -def discover_nt_by_name(c, tablename): - """Finds poker client window with the given table name.""" - titles = {} - win32gui.EnumWindows(win_enum_handler, titles) - - for hwnd in titles: - #print "Tables.py: tablename =", tablename, "title =", titles[hwnd] - try: - # maybe it's better to make global titles[hwnd] decoding? - # this can blow up in XP on some windows, eg firefox displaying http://docs.python.org/tutorial/classes.html - if not tablename.lower() in titles[hwnd].decode(Configuration.LOCALE_ENCODING).lower(): - continue - except: - continue - if 'History for table:' in titles[hwnd]: continue # Everleaf Network HH viewer window - if 'HUD:' in titles[hwnd]: continue # FPDB HUD window - if 'Chat:' in titles[hwnd]: continue # Some sites (FTP? PS? Others?) have seperable or seperately constructed chat windows - if ' - Table ' in titles[hwnd]: continue # Absolute table Chat window.. sigh. TODO: Can we tell what site we're trying to discover for somehow in here, so i can limit this check just to AP searches? - temp = decode_windows(c, titles[hwnd], hwnd) - print _("attach to window"), temp - return temp - return None - -def discover_nt_tournament(c, tour_number, tab_number): - """Finds the Windows window handle for the given tournament/table.""" - search_string = "%s.+%s" % (tour_number, tab_number) - - titles ={} - win32gui.EnumWindows(win_enum_handler, titles) - for hwnd in titles: - # Some sites (FTP? PS? Others?) have seperable or seperately constructed chat windows - if 'Chat:' in titles[hwnd]: continue - # Everleaf Network HH viewer window - if 'History for table:' in titles[hwnd]: continue - # FPDB HUD window - if 'HUD:' in titles[hwnd]: continue - - if re.search(search_string, titles[hwnd]): - return decode_windows(c, titles[hwnd], hwnd) - return None - -def get_nt_exe(hwnd): - """Finds the name of the executable that the given window handle belongs to.""" - - # Request privileges to enable "debug process", so we can later use - # PROCESS_VM_READ, retardedly required to GetModuleFileNameEx() - priv_flags = win32security.TOKEN_ADJUST_PRIVILEGES | win32security.TOKEN_QUERY - hToken = win32security.OpenProcessToken (win32api.GetCurrentProcess(), - priv_flags) - # enable "debug process" - privilege_id = win32security.LookupPrivilegeValue(None, - win32security.SE_DEBUG_NAME) - old_privs = win32security.AdjustTokenPrivileges(hToken, 0, - [(privilege_id, - win32security.SE_PRIVILEGE_ENABLED)]) - - # Open the process, and query it's filename - processid = win32process.GetWindowThreadProcessId(hwnd) - pshandle = win32api.OpenProcess(win32con.PROCESS_QUERY_INFORMATION | - win32con.PROCESS_VM_READ, False, - processid[1]) - try: - exename = win32process.GetModuleFileNameEx(pshandle, 0) - except pywintypes.error: - # insert code to call GetProcessImageName if we can find it.. - # returning None from here will hopefully break all following code - exename = None - finally: - # clean up - win32api.CloseHandle(pshandle) - win32api.CloseHandle(hToken) - - return exename - -def decode_windows(c, title, hwnd): - """Gets window parameters from the window title and handle--Windows.""" - -# I cannot figure out how to get the inside dimensions of the poker table -# windows. So I just assume all borders are 3 thick and all title bars -# are 29 high. No doubt this will be off when used with certain themes. - b_width = 3 - tb_height = 29 - - info = {} - info['number'] = hwnd - info['title'] = re.sub('\"', '', title) - (x, y, width, height) = win32gui.GetWindowRect(hwnd) - - info['x'] = int(x) + b_width - info['y'] = int( y ) + tb_height - info['width'] = int( width ) - 2*b_width - info['height'] = int( height ) - b_width - tb_height - info['exe'] = get_nt_exe(hwnd) - print "get_nt_exe returned ", info['exe'] - # TODO: 'width' here is all sorts of screwed up. - - title_bits = re.split(' - ', info['title']) - info['name'] = title_bits[0] - info['site'] = get_site_from_exe(c, info['exe']) - - return info - -def win_enum_handler(hwnd, titles): - str = win32gui.GetWindowText(hwnd) - if str != "": - titles[hwnd] = win32gui.GetWindowText(hwnd) - -################################################################### -# Utility routines used by all the discoverers. -def get_site_from_exe(c, exe): - """Look up the site from config, given the exe.""" - for s in c.get_supported_sites(): - params = c.get_site_parameters(s) - if re.search(params['table_finder'], exe): - return params['site_name'] - return None - -def everleaf_decode_table(tw): -# 2 - Tournament ID: 573256 - NL Hold'em - 150/300 blinds - Good luck ! - [Connection is ...] - pass - -def pokerstars_decode_table(tw): -# Extract poker information from the window title. This is not needed for -# fpdb, since all that information is available in the db via new_hand_number. -# This is needed only when using the HUD with a backend less integrated. - title_bits = re.split(' - ', tw.title) - name = title_bits[0] - mo = re.search('Tournament (\d+) Table (\d+)', name) - if mo: - tw.tournament = int( mo.group(1) ) - tw.table = int( mo.group(2) ) - tw.name = name - else: - tw.tournament = None - tw.name = clean_title(name) - mo = re.search('(Razz|Stud H/L|Stud|Omaha H/L|Omaha|Hold\'em|5-Card Draw|Triple Draw 2-7 Lowball|Badugi)', tw.title) - - tw.game = mo.group(1).lower() - tw.game = re.sub('\'', '', tw.game) - tw.game = re.sub('h/l', 'hi/lo', tw.game) - - mo = re.search('(No Limit|Pot Limit)', tw.title) - if mo: - tw.structure = mo.group(1).lower() - else: - tw.structure = 'limit' - - tw.max = None - if tw.game in ('razz', 'stud', 'stud hi/lo'): - tw.max = 8 - elif tw.game in ('5-card draw', 'triple draw 2-7 lowball'): - tw.max = 6 - elif tw.game == 'holdem': - pass - elif tw.game in ('omaha', 'omaha hi/lo'): - pass - -def fulltilt_decode_table(tw): -# Extract poker information from the window title. This is not needed for -# fpdb, since all that information is available in the db via new_hand_number. -# This is needed only when using the HUD with a backend less integrated. - title_bits = re.split(' - ', tw.title) - name = title_bits[0] - tw.tournament = None - tw.name = clean_title(name) - -def clean_title(name): - """Clean the little info strings from the table name.""" -# these strings could go in a config file - for pattern in [' \(6 max\)', ' \(heads up\)', ' \(deep\)', - ' \(deep hu\)', ' \(deep 6\)', '\(6 max, deep\)', ' \(2\)', - ' \(edu\)', ' \(edu, 6 max\)', ' \(6\)', - ' \(speed\)', 'special', 'newVPP', - ' no all-in', ' fast', ',', ' 50BB min', '50bb min', '\s+$']: - name = re.sub(pattern, '', name) - name = name.rstrip() - return name - -########################################################################### -# Mac specific routines....all stubs for now -def discover_mac_tournament(c, tour_number, tab_number): - """Mac users need help.""" - return None - -def discover_mac(c): - """Poker client table window finder for Macintosh.""" - tables = {} - return tables - -def discover_mac_by_name(c, tablename): - """Oh, the humanity.""" - # again, i have no mac to test this on, sorry -eric - return None - -########################################################################### -# Main function used for testing -if __name__=="__main__": - c = Configuration.Config() - - print discover_table_by_name(c, "Torino") -# print discover_tournament_table(c, "118942908", "3") - - tables = discover(c) - for t in tables.keys(): - print tables[t] - - print _("press enter to continue") - sys.stdin.readline() From eef5fd28e81ec83c94fb878db41c36e221ca35c3 Mon Sep 17 00:00:00 2001 From: Eratosthenes Date: Thu, 26 Aug 2010 22:52:16 -0400 Subject: [PATCH 09/53] FulltiltToFpdb: Throw exception when HandInfo reg ex doesn't match. --- pyfpdb/FulltiltToFpdb.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pyfpdb/FulltiltToFpdb.py b/pyfpdb/FulltiltToFpdb.py index 4b5fbcfd..b235ed4d 100755 --- a/pyfpdb/FulltiltToFpdb.py +++ b/pyfpdb/FulltiltToFpdb.py @@ -208,8 +208,7 @@ class Fulltilt(HandHistoryConverter): if m is None: logging.info("Didn't match re_HandInfo") logging.info(hand.handText) - # Should this throw an exception? - CG - return None + raise FpdbParseError("No match in readHandInfo.") hand.handid = m.group('HID') hand.tablename = m.group('TABLE') From bbb21b4b4d1580cd9565e9d2adf7569cbb57b541 Mon Sep 17 00:00:00 2001 From: Eratosthenes Date: Thu, 26 Aug 2010 22:52:16 -0400 Subject: [PATCH 10/53] FulltiltToFpdb: Throw exception when HandInfo reg ex doesn't match. --- pyfpdb/FulltiltToFpdb.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pyfpdb/FulltiltToFpdb.py b/pyfpdb/FulltiltToFpdb.py index 4b5fbcfd..b235ed4d 100755 --- a/pyfpdb/FulltiltToFpdb.py +++ b/pyfpdb/FulltiltToFpdb.py @@ -208,8 +208,7 @@ class Fulltilt(HandHistoryConverter): if m is None: logging.info("Didn't match re_HandInfo") logging.info(hand.handText) - # Should this throw an exception? - CG - return None + raise FpdbParseError("No match in readHandInfo.") hand.handid = m.group('HID') hand.tablename = m.group('TABLE') From f5db60f23baf21e83da1c3df455a2452f68c75d3 Mon Sep 17 00:00:00 2001 From: Eratosthenes Date: Thu, 26 Aug 2010 22:47:30 -0400 Subject: [PATCH 11/53] Get rid of obsolete import of obsolete Tables.py. --- pyfpdb/Hud.py | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/pyfpdb/Hud.py b/pyfpdb/Hud.py index c394108c..99b65c00 100644 --- a/pyfpdb/Hud.py +++ b/pyfpdb/Hud.py @@ -55,7 +55,6 @@ else: def _(string): return string # FreePokerTools modules -import Tables # needed for testing only import Configuration import Stats import Mucked @@ -941,26 +940,3 @@ class Popup_window: # window.present() -if __name__== "__main__": - main_window = gtk.Window() - main_window.connect("destroy", destroy) - label = gtk.Label(_('Fake main window, blah blah, blah\nblah, blah')) - main_window.add(label) - main_window.show_all() - - c = Configuration.Config() - #tables = Tables.discover(c) - t = Tables.discover_table_by_name(c, "Corona") - if t is None: - print _("Table not found.") - db = Database.Database(c, 'fpdb', 'holdem') - - stat_dict = db.get_stats_from_hand(1) - -# for t in tables: - win = Hud(None, t, 10, 'holdem', c, db) # parent, table, max, poker_game, config, db_connection - win.create(1, c, stat_dict, None) # hand, config, stat_dict, cards): -# t.get_details() - win.update(8300, c) # self, hand, config): - - gtk.main() From 6b978b8290c0f69a47f9976a9318a93379c99fbd Mon Sep 17 00:00:00 2001 From: Eratosthenes Date: Thu, 26 Aug 2010 22:48:06 -0400 Subject: [PATCH 12/53] Remove obsolete and unused Tables.py. --- pyfpdb/Tables.py | 449 ----------------------------------------------- 1 file changed, 449 deletions(-) delete mode 100755 pyfpdb/Tables.py diff --git a/pyfpdb/Tables.py b/pyfpdb/Tables.py deleted file mode 100755 index 3ffc7d1a..00000000 --- a/pyfpdb/Tables.py +++ /dev/null @@ -1,449 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -"""Discover_Tables.py - -Inspects the currently open windows and finds those of interest to us--that is -poker table windows from supported sites. Returns a list -of Table_Window objects representing the windows found. -""" -# Copyright 2008-2010, Ray E. Barker - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -######################################################################## - -# Standard Library modules -import os -import sys -import re - -import locale -lang=locale.getdefaultlocale()[0][0:2] -if lang=="en": - def _(string): return string -else: - import gettext - try: - trans = gettext.translation("fpdb", localedir="locale", languages=[lang]) - trans.install() - except IOError: - def _(string): return string - -# Win32 modules -if os.name == 'nt': - import win32gui - import win32process - import win32api - import win32con - import win32security - -# FreePokerTools modules -import Configuration - -# Each TableWindow object must have the following attributes correctly populated: -# tw.name = the table name from the title bar, which must to match the table name -# from the corresponding hand history. -# tw.site = the site name, e.g. PokerStars, FullTilt. This must match the site -# name specified in the config file. -# tw.number = This is the system id number for the client table window in the -# format that the system presents it. This is Xid in Xwindows and -# hwnd in Microsoft Windows. -# tw.title = The full title from the window title bar. -# tw.width, tw.height = The width and height of the window in pixels. This is -# the internal width and height, not including the title bar and -# window borders. -# tw.x, tw.y = The x, y (horizontal, vertical) location of the window relative -# to the top left of the display screen. This also does not include the -# title bar and window borders. To put it another way, this is the -# screen location of (0, 0) in the working window. - -class Table_Window: - def __init__(self, info = {}): - if 'number' in info: self.number = info['number'] - if 'exe' in info: self.exe = info['exe'] - if 'width' in info: self.width = info['width'] - if 'height' in info: self.height = info['height'] - if 'x' in info: self.x = info['x'] - if 'y' in info: self.y = info['y'] - if 'site' in info: self.site = info['site'] - if 'title' in info: self.title = info['title'] - if 'name' in info: self.name = info['name'] - self.gdkhandle = None - - def __str__(self): -# __str__ method for testing - temp = 'TableWindow object\n' - temp = temp + " name = %s\n site = %s\n number = %s\n title = %s\n" % (self.name, self.site, self.number, self.title) -# temp = temp + " game = %s\n structure = %s\n max = %s\n" % (self.game, self.structure, self.max) - temp = temp + " width = %d\n height = %d\n x = %d\n y = %d\n" % (self.width, self.height, self.x, self.y) - if getattr(self, 'tournament', 0): - temp = temp + " tournament = %d\n table = %d" % (self.tournament, self.table) - return temp - -############################################################################ -# Top-level discovery routines--these are the modules interface -def discover(c): - """Dispatch routine for finding all potential poker client windows.""" - if os.name == 'posix': - tables = discover_posix(c) - elif os.name == 'nt': - tables = discover_nt(c) - elif os.name == 'mac': - tables = discover_mac(c) - else: - tables = {} - return tables - -def discover_table_by_name(c, tablename): - """Dispatch routine for finding poker client windows with the given name.""" - if os.name == 'posix': - info = discover_posix_by_name(c, tablename) - elif os.name == 'nt': - info = discover_nt_by_name(c, tablename) - elif os.name == 'mac': - info = discover_mac_by_name(c, tablename) - else: - return None - if info is None: - return None - return Table_Window(info) - -def discover_tournament_table(c, tour_number, tab_number): - """Dispatch routine for finding poker clients with tour and table number.""" - if os.name == 'posix': - info = discover_posix_tournament(c, tour_number, tab_number) - elif os.name == 'nt': - info = discover_nt_tournament(c, tour_number, tab_number) - elif os.name == 'mac': - info = discover_mac_tournament(c, tour_number, tab_number) - else: - return None - if info: - return Table_Window(info) - return None - -############################################################################# -# Posix (= XWindows) specific routines -def discover_posix(c): - """Poker client table window finder for posix/Linux = XWindows.""" - tables = {} - for listing in os.popen('xwininfo -root -tree').readlines(): -# xwininfo -root -tree -id 0xnnnnn gets the info on a single window - for s in c.get_supported_sites(): - params = c.get_site_parameters(s) - -# TODO: We need to make a list of phrases, shared between the WIndows and Unix code!!!!!! - if re.search(params['table_finder'], listing): - if 'Lobby' in listing: continue - if 'Instant Hand History' in listing: continue -# if '\"Full Tilt Poker\"' in listing: continue - if 'History for table:' in listing: continue - if 'has no name' in listing: continue - info = decode_xwininfo(c, listing) - if info['site'] is None: continue - if info['title'] == info['exe']: continue -# this appears to be a poker client, so make a table object for it - tw = Table_Window(info) - eval("%s(tw)" % params['decoder']) - tables[tw.name] = tw - return tables - -def discover_posix_by_name(c, tablename): - """Find an XWindows poker client of the given name.""" - for listing in os.popen('xwininfo -root -tree').readlines(): - if tablename in listing: - if 'History for table:' in listing: continue - info = decode_xwininfo(c, listing) - if not info['name'] == tablename: continue - return info - return None - -def discover_posix_tournament(c, t_number, s_number): - """Finds the X window for a client, given tournament and table nos.""" - search_string = "%s.+Table.+%s" % (t_number, s_number) - for listing in os.popen('xwininfo -root -tree').readlines(): - if re.search(search_string, listing): - return decode_xwininfo(c, listing) - return None - -def decode_xwininfo(c, info_string): - """Gets window parameters from xwinifo string--XWindows.""" - info = {} - mo = re.match('\s+([\dxabcdef]+) (.+):\s\(\"([a-zA-Z.]+)\".+ (\d+)x(\d+)\+\d+\+\d+ \+(\d+)\+(\d+)', info_string) - if not mo: - return None - else: - info['number'] = int( mo.group(1), 0) - info['exe'] = mo.group(3) - info['width'] = int( mo.group(4) ) - info['height'] = int( mo.group(5) ) - info['x'] = int( mo.group(6) ) - info['y'] = int( mo.group(7) ) - info['site'] = get_site_from_exe(c, info['exe']) - info['title'] = re.sub('\"', '', mo.group(2)) - title_bits = re.split(' - ', info['title']) - info['name'] = clean_title(title_bits[0]) - return info - -############################################################################## -# NT (= Windows) specific routines -def discover_nt(c): - """ Poker client table window finder for Windows.""" -# -# I cannot figure out how to get the inside dimensions of the poker table -# windows. So I just assume all borders are 3 thick and all title bars -# are 29 high. No doubt this will be off when used with certain themes. -# - b_width = 3 - tb_height = 29 - titles = {} - tables = {} - win32gui.EnumWindows(win_enum_handler, titles) - for hwnd in titles: - if 'Logged In as' in titles[hwnd] and not 'Lobby' in titles[hwnd]: - if 'Full Tilt Poker' in titles[hwnd]: - continue - tw = Table_Window() - tw.number = hwnd - (x, y, width, height) = win32gui.GetWindowRect(hwnd) - tw.title = titles[hwnd] - tw.width = int( width ) - 2*b_width - tw.height = int( height ) - b_width - tb_height - tw.x = int( x ) + b_width - tw.y = int( y ) + tb_height - -# TODO: Isn't the site being determined by the EXE name it belongs to? is this section of code even useful? cleaning it anyway - if 'Logged In as' in titles[hwnd]: - tw.site = "PokerStars" - elif 'Logged In As' in titles[hwnd]: - tw.site = "Full Tilt" - else: - tw.site = "Unknown" - sys.stderr.write(_("Found unknown table = %s") % tw.title) - if tw.site != "Unknown": - eval("%s(tw)" % c.supported_sites[tw.site].decoder) - else: - tw.name = "Unknown" - tables[len(tables)] = tw - return tables - -def discover_nt_by_name(c, tablename): - """Finds poker client window with the given table name.""" - titles = {} - win32gui.EnumWindows(win_enum_handler, titles) - - for hwnd in titles: - #print "Tables.py: tablename =", tablename, "title =", titles[hwnd] - try: - # maybe it's better to make global titles[hwnd] decoding? - # this can blow up in XP on some windows, eg firefox displaying http://docs.python.org/tutorial/classes.html - if not tablename.lower() in titles[hwnd].decode(Configuration.LOCALE_ENCODING).lower(): - continue - except: - continue - if 'History for table:' in titles[hwnd]: continue # Everleaf Network HH viewer window - if 'HUD:' in titles[hwnd]: continue # FPDB HUD window - if 'Chat:' in titles[hwnd]: continue # Some sites (FTP? PS? Others?) have seperable or seperately constructed chat windows - if ' - Table ' in titles[hwnd]: continue # Absolute table Chat window.. sigh. TODO: Can we tell what site we're trying to discover for somehow in here, so i can limit this check just to AP searches? - temp = decode_windows(c, titles[hwnd], hwnd) - print _("attach to window"), temp - return temp - return None - -def discover_nt_tournament(c, tour_number, tab_number): - """Finds the Windows window handle for the given tournament/table.""" - search_string = "%s.+%s" % (tour_number, tab_number) - - titles ={} - win32gui.EnumWindows(win_enum_handler, titles) - for hwnd in titles: - # Some sites (FTP? PS? Others?) have seperable or seperately constructed chat windows - if 'Chat:' in titles[hwnd]: continue - # Everleaf Network HH viewer window - if 'History for table:' in titles[hwnd]: continue - # FPDB HUD window - if 'HUD:' in titles[hwnd]: continue - - if re.search(search_string, titles[hwnd]): - return decode_windows(c, titles[hwnd], hwnd) - return None - -def get_nt_exe(hwnd): - """Finds the name of the executable that the given window handle belongs to.""" - - # Request privileges to enable "debug process", so we can later use - # PROCESS_VM_READ, retardedly required to GetModuleFileNameEx() - priv_flags = win32security.TOKEN_ADJUST_PRIVILEGES | win32security.TOKEN_QUERY - hToken = win32security.OpenProcessToken (win32api.GetCurrentProcess(), - priv_flags) - # enable "debug process" - privilege_id = win32security.LookupPrivilegeValue(None, - win32security.SE_DEBUG_NAME) - old_privs = win32security.AdjustTokenPrivileges(hToken, 0, - [(privilege_id, - win32security.SE_PRIVILEGE_ENABLED)]) - - # Open the process, and query it's filename - processid = win32process.GetWindowThreadProcessId(hwnd) - pshandle = win32api.OpenProcess(win32con.PROCESS_QUERY_INFORMATION | - win32con.PROCESS_VM_READ, False, - processid[1]) - try: - exename = win32process.GetModuleFileNameEx(pshandle, 0) - except pywintypes.error: - # insert code to call GetProcessImageName if we can find it.. - # returning None from here will hopefully break all following code - exename = None - finally: - # clean up - win32api.CloseHandle(pshandle) - win32api.CloseHandle(hToken) - - return exename - -def decode_windows(c, title, hwnd): - """Gets window parameters from the window title and handle--Windows.""" - -# I cannot figure out how to get the inside dimensions of the poker table -# windows. So I just assume all borders are 3 thick and all title bars -# are 29 high. No doubt this will be off when used with certain themes. - b_width = 3 - tb_height = 29 - - info = {} - info['number'] = hwnd - info['title'] = re.sub('\"', '', title) - (x, y, width, height) = win32gui.GetWindowRect(hwnd) - - info['x'] = int(x) + b_width - info['y'] = int( y ) + tb_height - info['width'] = int( width ) - 2*b_width - info['height'] = int( height ) - b_width - tb_height - info['exe'] = get_nt_exe(hwnd) - print "get_nt_exe returned ", info['exe'] - # TODO: 'width' here is all sorts of screwed up. - - title_bits = re.split(' - ', info['title']) - info['name'] = title_bits[0] - info['site'] = get_site_from_exe(c, info['exe']) - - return info - -def win_enum_handler(hwnd, titles): - str = win32gui.GetWindowText(hwnd) - if str != "": - titles[hwnd] = win32gui.GetWindowText(hwnd) - -################################################################### -# Utility routines used by all the discoverers. -def get_site_from_exe(c, exe): - """Look up the site from config, given the exe.""" - for s in c.get_supported_sites(): - params = c.get_site_parameters(s) - if re.search(params['table_finder'], exe): - return params['site_name'] - return None - -def everleaf_decode_table(tw): -# 2 - Tournament ID: 573256 - NL Hold'em - 150/300 blinds - Good luck ! - [Connection is ...] - pass - -def pokerstars_decode_table(tw): -# Extract poker information from the window title. This is not needed for -# fpdb, since all that information is available in the db via new_hand_number. -# This is needed only when using the HUD with a backend less integrated. - title_bits = re.split(' - ', tw.title) - name = title_bits[0] - mo = re.search('Tournament (\d+) Table (\d+)', name) - if mo: - tw.tournament = int( mo.group(1) ) - tw.table = int( mo.group(2) ) - tw.name = name - else: - tw.tournament = None - tw.name = clean_title(name) - mo = re.search('(Razz|Stud H/L|Stud|Omaha H/L|Omaha|Hold\'em|5-Card Draw|Triple Draw 2-7 Lowball|Badugi)', tw.title) - - tw.game = mo.group(1).lower() - tw.game = re.sub('\'', '', tw.game) - tw.game = re.sub('h/l', 'hi/lo', tw.game) - - mo = re.search('(No Limit|Pot Limit)', tw.title) - if mo: - tw.structure = mo.group(1).lower() - else: - tw.structure = 'limit' - - tw.max = None - if tw.game in ('razz', 'stud', 'stud hi/lo'): - tw.max = 8 - elif tw.game in ('5-card draw', 'triple draw 2-7 lowball'): - tw.max = 6 - elif tw.game == 'holdem': - pass - elif tw.game in ('omaha', 'omaha hi/lo'): - pass - -def fulltilt_decode_table(tw): -# Extract poker information from the window title. This is not needed for -# fpdb, since all that information is available in the db via new_hand_number. -# This is needed only when using the HUD with a backend less integrated. - title_bits = re.split(' - ', tw.title) - name = title_bits[0] - tw.tournament = None - tw.name = clean_title(name) - -def clean_title(name): - """Clean the little info strings from the table name.""" -# these strings could go in a config file - for pattern in [' \(6 max\)', ' \(heads up\)', ' \(deep\)', - ' \(deep hu\)', ' \(deep 6\)', '\(6 max, deep\)', ' \(2\)', - ' \(edu\)', ' \(edu, 6 max\)', ' \(6\)', - ' \(speed\)', 'special', 'newVPP', - ' no all-in', ' fast', ',', ' 50BB min', '50bb min', '\s+$']: - name = re.sub(pattern, '', name) - name = name.rstrip() - return name - -########################################################################### -# Mac specific routines....all stubs for now -def discover_mac_tournament(c, tour_number, tab_number): - """Mac users need help.""" - return None - -def discover_mac(c): - """Poker client table window finder for Macintosh.""" - tables = {} - return tables - -def discover_mac_by_name(c, tablename): - """Oh, the humanity.""" - # again, i have no mac to test this on, sorry -eric - return None - -########################################################################### -# Main function used for testing -if __name__=="__main__": - c = Configuration.Config() - - print discover_table_by_name(c, "Torino") -# print discover_tournament_table(c, "118942908", "3") - - tables = discover(c) - for t in tables.keys(): - print tables[t] - - print _("press enter to continue") - sys.stdin.readline() From 7acc8e11356592c2f1e64575bf8a91ea6d629262 Mon Sep 17 00:00:00 2001 From: Mika Bostrom Date: Fri, 27 Aug 2010 08:27:16 +0300 Subject: [PATCH 13/53] Update changelog for snapshot --- packaging/debian/changelog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packaging/debian/changelog b/packaging/debian/changelog index 29aa5e79..c09713a3 100644 --- a/packaging/debian/changelog +++ b/packaging/debian/changelog @@ -1,3 +1,9 @@ +free-poker-tools (0.20.906-1) unstable; urgency=low + + * New snapshot + + -- Mika Bostrom Fri, 27 Aug 2010 08:26:05 +0300 + free-poker-tools (0.20.905-1) unstable; urgency=low * New snapshot From d44b9494fbde94eecee50d0a67310dbf5380aa49 Mon Sep 17 00:00:00 2001 From: Mika Bostrom Date: Fri, 27 Aug 2010 09:11:50 +0300 Subject: [PATCH 14/53] py2exe script moved to packaging/windows --- packaging/debian/rules | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packaging/debian/rules b/packaging/debian/rules index 58b1136b..9f8d5238 100755 --- a/packaging/debian/rules +++ b/packaging/debian/rules @@ -26,8 +26,7 @@ install: build # Copy *.pyw manually in packaging tree cp pyfpdb/*.pyw debian/$(PACKAGE)/usr/lib/python2.6/site-packages/fpdb/ # Remove scripts that are only useful in win32 - rm debian/$(PACKAGE)/usr/lib/python2.6/site-packages/fpdb//windows_make_bats.py - rm debian/$(PACKAGE)/usr/lib/python2.6/site-packages/fpdb/py2exe_setup.py + rm debian/$(PACKAGE)/usr/lib/python2.6/site-packages/fpdb/windows_make_bats.py binary-indep: build install From de9c0d9ba6ce52524cbde3015a316e22dff5a3e7 Mon Sep 17 00:00:00 2001 From: Worros Date: Fri, 27 Aug 2010 14:44:19 +0800 Subject: [PATCH 15/53] Stars: Minor refactor to readHandInfo Make the readHandInfo function throw an exception if either of the regexes used fails to match --- pyfpdb/PokerStarsToFpdb.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/pyfpdb/PokerStarsToFpdb.py b/pyfpdb/PokerStarsToFpdb.py index 39347f73..4fbe9dfd 100644 --- a/pyfpdb/PokerStarsToFpdb.py +++ b/pyfpdb/PokerStarsToFpdb.py @@ -224,14 +224,15 @@ class PokerStars(HandHistoryConverter): def readHandInfo(self, hand): info = {} - m = self.re_HandInfo.search(hand.handText,re.DOTALL) - if m: - info.update(m.groupdict()) - else: - pass # throw an exception here, eh? - m = self.re_GameInfo.search(hand.handText) - if m: - info.update(m.groupdict()) + m = self.re_HandInfo.search(hand.handText,re.DOTALL) + m2 = self.re_GameInfo.search(hand.handText) + if m is None or m2 is None: + logging.info("Didn't match re_HandInfo") + logging.info(hand.handText) + raise FpdbParseError("No match in readHandInfo.") + + info.update(m.groupdict()) + info.update(m2.groupdict()) log.debug("readHandInfo: %s" % info) for key in info: From 004dd80fc2a9b1f4ff908c2b511ae9af3219a990 Mon Sep 17 00:00:00 2001 From: Eratosthenes Date: Fri, 27 Aug 2010 10:53:33 -0400 Subject: [PATCH 16/53] PartyPokerToFpdb: Allow HUD to find STTs. --- pyfpdb/PartyPokerToFpdb.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pyfpdb/PartyPokerToFpdb.py b/pyfpdb/PartyPokerToFpdb.py index 2dab4569..4b941d54 100755 --- a/pyfpdb/PartyPokerToFpdb.py +++ b/pyfpdb/PartyPokerToFpdb.py @@ -502,7 +502,10 @@ class PartyPoker(HandHistoryConverter): if type=="tour": TableName = table_name.split(" ") print 'party', 'getTableTitleRe', "%s.+Table\s#%s" % (TableName[0], table_number) - return "%s.+Table\s#%s" % (TableName[0], table_number) + if table_number is None: + return "#%s" % (TableName[0]) + else: + return "%s.+Table\s#%s" % (TableName[0], table_number) else: print 'party', 'getTableTitleRe', table_number return table_name From 3eb4f057bc445f93c64e217c3374cd4e844ff0af Mon Sep 17 00:00:00 2001 From: Worros Date: Sat, 28 Aug 2010 16:43:05 +0800 Subject: [PATCH 17/53] THP: Add 'support' for other sites --- pyfpdb/TestHandsPlayers.py | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/pyfpdb/TestHandsPlayers.py b/pyfpdb/TestHandsPlayers.py index 5da4d672..ae521f71 100644 --- a/pyfpdb/TestHandsPlayers.py +++ b/pyfpdb/TestHandsPlayers.py @@ -12,7 +12,8 @@ import fpdb_import class FpdbError: - def __init__(self): + def __init__(self, sitename): + self.site = sitename self.errorcount = 0 self.histogram = {} @@ -28,6 +29,7 @@ class FpdbError: self.errorcount += 1 def print_histogram(self): + print "%s:" % self.site for f in self.histogram: idx = f.find('regression') print "(%3d) : %s" %(self.histogram[f], f[idx:]) @@ -103,14 +105,25 @@ def main(argv=None): importer.setCallHud(False) importer.setFakeCacheHHC(True) - errors = FpdbError() + PokerStarsErrors = FpdbError('PokerStars') + FTPErrors = FpdbError('Full Tilt Poker') + PartyPokerErrors = FpdbError('Party Poker') + BetfairErrors = FpdbError('Betfair') - walk_testfiles("regression-test-files/cash/Stars/", compare, importer, errors) + walk_testfiles("regression-test-files/cash/Stars/", compare, importer, PokerStarsErrors) + walk_testfiles("regression-test-files/cash/FTP/", compare, importer, FTPErrors) + walk_testfiles("regression-test-files/cash/PartyPoker/", compare, importer, PartyPokerErrors) + walk_testfiles("regression-test-files/cash/Betfair/", compare, importer, BetfairErrors) + + totalerrors = PokerStarsErrors.errorcount + FTPErrors.errorcount + PartyPokerErrors.errorcount + BetfairErrors.errorcount print "---------------------" - print "Total Errors: %d" % errors.errorcount + print "Total Errors: %d" % totalerrors print "---------------------" - errors.print_histogram() + PokerStarsErrors.print_histogram() + FTPErrors.print_histogram() + PartyPokerErrors.print_histogram() + BetfairErrors.print_histogram() if __name__ == '__main__': sys.exit(main()) From ad3c6516cd435c08ffa6aa8f57520c49148891be Mon Sep 17 00:00:00 2001 From: Eratosthenes Date: Sat, 28 Aug 2010 09:25:41 -0400 Subject: [PATCH 18/53] PartyPokerToFpdb: Try again to fix STT HUD. --- pyfpdb/PartyPokerToFpdb.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyfpdb/PartyPokerToFpdb.py b/pyfpdb/PartyPokerToFpdb.py index 4b941d54..f61b5b7b 100755 --- a/pyfpdb/PartyPokerToFpdb.py +++ b/pyfpdb/PartyPokerToFpdb.py @@ -502,8 +502,8 @@ class PartyPoker(HandHistoryConverter): if type=="tour": TableName = table_name.split(" ") print 'party', 'getTableTitleRe', "%s.+Table\s#%s" % (TableName[0], table_number) - if table_number is None: - return "#%s" % (TableName[0]) + if len(TableName[1]) > 6: + return "#%s" % (table_number) else: return "%s.+Table\s#%s" % (TableName[0], table_number) else: From 01c7e37bae5256b7761bf7521ad2febc7ed6264d Mon Sep 17 00:00:00 2001 From: sqlcoder Date: Sat, 28 Aug 2010 18:11:35 +0100 Subject: [PATCH 19/53] implement Add button in Database dialog (sqlite only) --- pyfpdb/Configuration.py | 65 +++++- pyfpdb/GuiDatabase.py | 500 +++++++++++++++++++++++++++++----------- 2 files changed, 427 insertions(+), 138 deletions(-) diff --git a/pyfpdb/Configuration.py b/pyfpdb/Configuration.py index 1349581d..edc7fb9b 100755 --- a/pyfpdb/Configuration.py +++ b/pyfpdb/Configuration.py @@ -974,9 +974,12 @@ class Config: if db_pass is not None: db_node.setAttribute("db_pass", db_pass) if db_server is not None: db_node.setAttribute("db_server", db_server) if defaultb or self.db_selected == db_name: - db_node.setAttribute("default", True) + db_node.setAttribute("default", "True") + for dbn in self.doc.getElementsByTagName("database"): + if dbn.getAttribute('db_name') != db_name and dbn.hasAttribute("default"): + dbn.removeAttribute("default") elif db_node.hasAttribute("default"): - db_node.removeAttribute("default") + db_node.removeAttribute("default") if self.supported_databases.has_key(db_name): if db_desc is not None: self.supported_databases[db_name].dp_desc = db_desc if db_ip is not None: self.supported_databases[db_name].dp_ip = db_ip @@ -987,6 +990,64 @@ class Config: if defaultb: self.db_selected = db_name return + + def add_db_parameters(self, db_name = 'fpdb', db_ip = None, db_user = None, + db_pass = None, db_desc = None, db_server = None, + default = "False"): + default = default.lower() + defaultb = string_to_bool(default, False) + if db_name in self.supported_databases: + raise ValueError("Database names must be unique") + + db_node = self.get_db_node(db_name) + if db_node is None: + for db_node in self.doc.getElementsByTagName("supported_databases"): + # should only be one supported_databases element, use last one if there are several + suppdb_node = db_node + t_node = self.doc.createTextNode(" ") + suppdb_node.appendChild(t_node) + db_node = self.doc.createElement("database") + suppdb_node.appendChild(db_node) + t_node = self.doc.createTextNode("\r\n ") + suppdb_node.appendChild(t_node) + db_node.setAttribute("db_name", db_name) + if db_desc is not None: db_node.setAttribute("db_desc", db_desc) + if db_ip is not None: db_node.setAttribute("db_ip", db_ip) + if db_user is not None: db_node.setAttribute("db_user", db_user) + if db_pass is not None: db_node.setAttribute("db_pass", db_pass) + if db_server is not None: db_node.setAttribute("db_server", db_server) + if defaultb: + db_node.setAttribute("default", "True") + for dbn in self.doc.getElementsByTagName("database"): + if dbn.getAttribute('db_name') != db_name and dbn.hasAttribute("default"): + dbn.removeAttribute("default") + elif db_node.hasAttribute("default"): + db_node.removeAttribute("default") + else: + if db_desc is not None: db_node.setAttribute("db_desc", db_desc) + if db_ip is not None: db_node.setAttribute("db_ip", db_ip) + if db_user is not None: db_node.setAttribute("db_user", db_user) + if db_pass is not None: db_node.setAttribute("db_pass", db_pass) + if db_server is not None: db_node.setAttribute("db_server", db_server) + if defaultb or self.db_selected == db_name: + db_node.setAttribute("default", "True") + elif db_node.hasAttribute("default"): + db_node.removeAttribute("default") + + if self.supported_databases.has_key(db_name): + if db_desc is not None: self.supported_databases[db_name].dp_desc = db_desc + if db_ip is not None: self.supported_databases[db_name].dp_ip = db_ip + if db_user is not None: self.supported_databases[db_name].dp_user = db_user + if db_pass is not None: self.supported_databases[db_name].dp_pass = db_pass + if db_server is not None: self.supported_databases[db_name].dp_server = db_server + self.supported_databases[db_name].db_selected = defaultb + else: + db = Database(node=db_node) + self.supported_databases[db.db_name] = db + + if defaultb: + self.db_selected = db_name + return def get_backend(self, name): """Returns the number of the currently used backend""" diff --git a/pyfpdb/GuiDatabase.py b/pyfpdb/GuiDatabase.py index ceea6dfd..599f0a7e 100755 --- a/pyfpdb/GuiDatabase.py +++ b/pyfpdb/GuiDatabase.py @@ -19,6 +19,7 @@ import os import sys import traceback import Queue +import re import pygtk pygtk.require('2.0') @@ -32,6 +33,7 @@ log = logging.getLogger("maintdbs") import Exceptions +import Configuration import Database import SQL @@ -112,24 +114,11 @@ class GuiDatabase: self.scrolledwindow.add(self.listview) h.pack_start(self.scrolledwindow, expand=True, fill=True, padding=0) - # to change label on buttons: - # ( see http://faq.pygtk.org/index.py?req=show&file=faq09.005.htp ) - gtk.stock_add([(gtk.STOCK_ADD, _("Add"), 0, 0, "")]) - - # alternatively: - # button = gtk.Button(stock=gtk.STOCK_CANCEL) - # button.show() - # alignment = button.get_children()[0] - # hbox = alignment.get_children()[0] - # image, label = hbox.get_children() - # label.set_text('Hide') - - - add_button = self.makeSideButton(_("Add"), gtk.STOCK_ADD) + add_button = SideButton(_("_Add"), gtk.STOCK_ADD) add_button.connect("clicked", self.addDB, None) vbtn.pack_start(add_button, False, False, 3) - refresh_button = self.makeSideButton(_("Refresh"), gtk.STOCK_REFRESH) + refresh_button = SideButton(_("_Refresh"), gtk.STOCK_REFRESH) refresh_button.connect("clicked", self.refresh, None) vbtn.pack_start(refresh_button, False, False, 3) @@ -139,7 +128,7 @@ class GuiDatabase: col = self.addTextColumn(_("Username"), 3, True) col = self.addTextColumn(_("Password"), 4, True) col = self.addTextColumn(_("Host"), 5, True) - col = self.addTextObjColumn(_("Default"), 6, 6) + col = self.addTextObjColumn(_("Open"), 6, 6) col = self.addTextObjColumn(_("Status"), 7, 8) #self.listview.get_selection().set_mode(gtk.SELECTION_SINGLE) @@ -155,25 +144,6 @@ class GuiDatabase: err = traceback.extract_tb(sys.exc_info()[2])[-1] print 'guidbmaint: '+ err[2] + "(" + str(err[1]) + "): " + str(sys.exc_info()[1]) - def makeSideButton(self, label, stock): - gtk.stock_add([(gtk.STOCK_REFRESH, _("Refresh"), 0, 0, "")]) - - button = gtk.Button(stock=stock) - alignment = button.get_children()[0] - hbox = alignment.get_children()[0] - image, label = hbox.get_children() - #label.set_text('Hide') - hbox.remove(image) - hbox.remove(label) - v = gtk.VBox(False, spacing=3) - v.pack_start(image, 3) - v.pack_start(label, 3) - alignment.remove(hbox) - alignment.add(v) - button.show_all() - - return(button) - def dialog_response_cb(self, dialog, response_id): # this is called whether close button is pressed or window is closed log.info('dialog_response_cb: response_id='+str(response_id)) @@ -293,7 +263,7 @@ class GuiDatabase: self.liststore.clear() #self.listcols = [] - dia = self.info_box2(None, _('Testing database connections ... '), "", False, False) + dia = InfoBox( parent=self.dia, str1=_('Testing database connections ... ') ) while gtk.events_pending(): gtk.main_iteration() @@ -313,57 +283,14 @@ class GuiDatabase: default = (name == self.config.db_selected) default_icon = None if default: default_icon = gtk.STOCK_APPLY - status = "" - icon = None - err_msg = "" - sql = SQL.Sql(db_server=dbms) - db = Database.Database(self.config, sql = sql, autoconnect = False) - # try to connect to db, set status and err_msg if it fails - try: - # is creating empty db for sqlite ... mod db.py further? - # add noDbTables flag to db.py? - log.debug(_("loaddbs: trying to connect to: %s/%s, %s, %s/%s") % (str(dbms_num),dbms,name,user,passwd)) - db.connect(backend=dbms_num, host=host, database=name, user=user, password=passwd, create=False) - if db.connected: - log.debug(_(" connected ok")) - status = 'ok' - icon = gtk.STOCK_APPLY - if db.wrongDbVersion: - status = 'old' - icon = gtk.STOCK_INFO - else: - log.debug(_(" not connected but no exception")) - except Exceptions.FpdbMySQLAccessDenied: - err_msg = _("MySQL Server reports: Access denied. Are your permissions set correctly?") - status = "failed" - icon = gtk.STOCK_CANCEL - except Exceptions.FpdbMySQLNoDatabase: - err_msg = _("MySQL client reports: 2002 or 2003 error. Unable to connect - Please check that the MySQL service has been started") - status = "failed" - icon = gtk.STOCK_CANCEL - except Exceptions.FpdbPostgresqlAccessDenied: - err_msg = _("Postgres Server reports: Access denied. Are your permissions set correctly?") - status = "failed" - except Exceptions.FpdbPostgresqlNoDatabase: - err_msg = _("Postgres client reports: Unable to connect - Please check that the Postgres service has been started") - status = "failed" - icon = gtk.STOCK_CANCEL - except: - err = traceback.extract_tb(sys.exc_info()[2])[-1] - log.info( 'db connection to '+str(dbms_num)+','+host+','+name+','+user+','+passwd+' failed: ' - + err[2] + "(" + str(err[1]) + "): " + str(sys.exc_info()[1]) )#TODO Gettextify - status = "failed" - icon = gtk.STOCK_CANCEL - if err_msg: - log.info( 'db connection to '+str(dbms_num)+','+host+','+name+','+user+','+passwd+' failed: ' - + err_msg )#TODO Gettextify + status, err_msg, icon = GuiDatabase.testDB(self.config, dbms, dbms_num, name, user, passwd, host) b = gtk.Button(name) b.show() iter = self.liststore.append( (dbms, name, comment, user, passwd, host, "", default_icon, status, icon) ) - self.info_box2(dia[0], _("finished."), "", False, True) + dia.add_msg( _("finished."), False, True ) self.listview.show() self.scrolledwindow.show() self.vbox.show() @@ -402,66 +329,367 @@ class GuiDatabase: self.loadDbs() def addDB(self, widget, data): - pass + adb = AddDB(self.config, self.dia) + (status, err_msg, icon, dbms, dbms_num, name, comment, user, passwd, host) = adb.run() + adb.destroy() - def info_box(self, dia, str1, str2, run, destroy): - if dia is None: - #if run: - btns = gtk.BUTTONS_NONE - btns = gtk.BUTTONS_OK - dia = gtk.MessageDialog( parent=self.main_window, flags=gtk.DIALOG_DESTROY_WITH_PARENT - , type=gtk.MESSAGE_INFO, buttons=(btns), message_format=str1 ) - # try to remove buttons! - # (main message is in inverse video if no buttons, so try removing them after - # creating dialog) - # NO! message just goes back to inverse video :-( use info_box2 instead - for c in dia.vbox.get_children(): - if isinstance(c, gtk.HButtonBox): - for d in c.get_children(): - log.info('child: '+str(d)+' is a '+str(d.__class__)) - if isinstance(d, gtk.Button): - log.info(_('removing button %s'% str(d))) - c.remove(d) - if str2: - dia.format_secondary_text(str2) - else: - dia.set_markup(str1) - if str2: - dia.format_secondary_text(str2) - dia.show() - response = None - if run: response = dia.run() - if destroy: dia.destroy() - return (dia, response) + # save in liststore + if status == 'ok': + iter = self.liststore.append( (dbms, name, comment, user, passwd, host, "", None, status, icon) ) - def info_box2(self, dia, str1, str2, run, destroy): - if dia is None: - # create dialog and add icon and label - btns = (gtk.BUTTONS_OK) - btns = None - # messagedialog puts text in inverse colors if no buttons are displayed?? - #dia = gtk.MessageDialog( parent=self.main_window, flags=gtk.DIALOG_DESTROY_WITH_PARENT - # , type=gtk.MESSAGE_INFO, buttons=(btns), message_format=str1 ) - dia = gtk.Dialog( parent=self.dia, flags=gtk.DIALOG_DESTROY_WITH_PARENT - , title="" ) # , buttons=btns - vbox = dia.vbox + # keep config save code in line with edited_cb()? call common routine? + + valid = True + # Validate new value (only for dbms so far, but dbms now not updateable so no validation at all!) + #if col == self.COL_DBMS: + # if new_text not in Configuration.DATABASE_TYPES: + # valid = False + + if valid: + self.config.add_db_parameters( db_server = dbms + , db_name = name + , db_desc = comment + , db_ip = host + , db_user = user + , db_pass = passwd ) + self.config.save() + self.changes = False + + + @staticmethod + def testDB(config, dbms, dbms_num, name, user, passwd, host): + status = "" + icon = None + err_msg = "" + + sql = SQL.Sql(db_server=dbms) + db = Database.Database(config, sql = sql, autoconnect = False) + # try to connect to db, set status and err_msg if it fails + try: + # is creating empty db for sqlite ... mod db.py further? + # add noDbTables flag to db.py? + log.debug(_("loaddbs: trying to connect to: %s/%s, %s, %s/%s") % (str(dbms_num),dbms,name,user,passwd)) + db.connect(backend=dbms_num, host=host, database=name, user=user, password=passwd, create=False) + if db.connected: + log.debug(_(" connected ok")) + status = 'ok' + icon = gtk.STOCK_APPLY + if db.wrongDbVersion: + status = 'old' + icon = gtk.STOCK_INFO + else: + log.debug(_(" not connected but no exception")) + except Exceptions.FpdbMySQLAccessDenied: + err_msg = _("MySQL Server reports: Access denied. Are your permissions set correctly?") + status = "failed" + icon = gtk.STOCK_CANCEL + except Exceptions.FpdbMySQLNoDatabase: + err_msg = _("MySQL client reports: 2002 or 2003 error. Unable to connect - Please check that the MySQL service has been started") + status = "failed" + icon = gtk.STOCK_CANCEL + except Exceptions.FpdbPostgresqlAccessDenied: + err_msg = _("Postgres Server reports: Access denied. Are your permissions set correctly?") + status = "failed" + except Exceptions.FpdbPostgresqlNoDatabase: + err_msg = _("Postgres client reports: Unable to connect - Please check that the Postgres service has been started") + status = "failed" + icon = gtk.STOCK_CANCEL + except: + # add more specific exceptions here if found (e.g. for sqlite?) + err = traceback.extract_tb(sys.exc_info()[2])[-1] + err_msg = err[2] + "(" + str(err[1]) + "): " + str(sys.exc_info()[1]) + status = "failed" + icon = gtk.STOCK_CANCEL + if err_msg: + log.info( _('db connection to ') + str(dbms_num)+','+host+','+name+','+user+','+passwd+' failed: ' + + err_msg ) + + return( status, err_msg, icon ) + + +class AddDB(gtk.Dialog): + + def __init__(self, config, parent): + log.debug("AddDB starting") + self.dbnames = { 'Sqlite' : Configuration.DATABASE_TYPE_SQLITE + , 'MySQL' : Configuration.DATABASE_TYPE_MYSQL + , 'PostgreSQL' : Configuration.DATABASE_TYPE_POSTGRESQL + } + self.config = config + # create dialog and add icon and label + super(AddDB,self).__init__( parent=parent + , flags=gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT + , title="Add New Database" + , buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT + ,gtk.STOCK_SAVE, gtk.RESPONSE_ACCEPT) + ) # , buttons=btns + self.set_default_size(450, 280) + #self.connect('response', self.response_cb) + + t = gtk.Table(5, 3, True) + self.vbox.pack_start(t, expand=False, fill=False, padding=3) + + l = gtk.Label( _("DB Type") ) + l.set_alignment(1.0, 0.5) + t.attach(l, 0, 1, 0, 1, xpadding=3) + self.cb_dbms = gtk.combo_box_new_text() + for s in ('Sqlite',): # keys(self.dbnames): + self.cb_dbms.append_text(s) + self.cb_dbms.set_active(0) + t.attach(self.cb_dbms, 1, 3, 0, 1, xpadding=3) + self.cb_dbms.connect("changed", self.db_type_changed, None) + + l = gtk.Label( _("DB Name") ) + l.set_alignment(1.0, 0.5) + t.attach(l, 0, 1, 1, 2, xpadding=3) + self.e_db_name = gtk.Entry() + self.e_db_name.set_width_chars(15) + t.attach(self.e_db_name, 1, 3, 1, 2, xpadding=3) + self.e_db_name.connect("focus-out-event", self.db_name_changed, None) + + l = gtk.Label( _("DB Description") ) + l.set_alignment(1.0, 0.5) + t.attach(l, 0, 1, 2, 3, xpadding=3) + self.e_db_desc = gtk.Entry() + self.e_db_desc.set_width_chars(15) + t.attach(self.e_db_desc, 1, 3, 2, 3, xpadding=3) + + self.l_username = gtk.Label( _("Username") ) + self.l_username.set_alignment(1.0, 0.5) + t.attach(self.l_username, 0, 1, 3, 4, xpadding=3) + self.e_username = gtk.Entry() + self.e_username.set_width_chars(15) + t.attach(self.e_username, 1, 3, 3, 4, xpadding=3) + + self.l_password = gtk.Label( _("Password") ) + self.l_password.set_alignment(1.0, 0.5) + t.attach(self.l_password, 0, 1, 4, 5, xpadding=3) + self.e_password = gtk.Entry() + self.e_password.set_width_chars(15) + t.attach(self.e_password, 1, 3, 4, 5, xpadding=3) + + self.l_host = gtk.Label( _("Host Computer") ) + self.l_host.set_alignment(1.0, 0.5) + t.attach(self.l_host, 0, 1, 5, 6, xpadding=3) + self.e_host = gtk.Entry() + self.e_host.set_width_chars(15) + self.e_host.set_text("localhost") + t.attach(self.e_host, 1, 3, 5, 6, xpadding=3) + + parent.show_all() + self.show_all() + + # hide username/password fields as not used by sqlite + self.l_username.hide() + self.e_username.hide() + self.l_password.hide() + self.e_password.hide() + + def run(self): + response = super(AddDB,self).run() + log.debug("adddb.run: response is "+str(response)+" accept is "+str(int(gtk.RESPONSE_ACCEPT))) + + ok,retry = False,True + while response == gtk.RESPONSE_ACCEPT: + ok,retry = self.check_fields() + if retry: + response = super(AddDB,self).run() + else: + response = gtk.RESPONSE_REJECT + + (status, err_msg, icon, dbms, dbms_num + ,name, db_desc, user, passwd, host) = ("error", "error", None, None, None + ,None, None, None, None, None) + if ok: + log.debug("start creating new db") + # add a new db + master_password = None + dbms = self.dbnames[ self.cb_dbms.get_active_text() ] + dbms_num = self.config.get_backend(dbms) + name = self.e_db_name.get_text() + db_desc = self.e_db_desc.get_text() + user = self.e_username.get_text() + passwd = self.e_password.get_text() + host = self.e_host.get_text() - h = gtk.HBox(False, 2) - i = gtk.Image() - i.set_from_stock(gtk.STOCK_DIALOG_INFO, gtk.ICON_SIZE_DIALOG) - l = gtk.Label(str1) - h.pack_start(i, padding=5) - h.pack_start(l, padding=5) - vbox.pack_start(h) + # TODO: + # if self.cb_dbms.get_active_text() == 'Postgres': + # + + # create_db() in Database.py or here? ... TODO + + # test db after creating? + status, err_msg, icon = GuiDatabase.testDB(self.config, dbms, dbms_num, name, user, passwd, host) + log.debug('tested new db, result='+str((status,err_msg))) + if status == 'ok': + #dia = InfoBox( parent=self, str1=_('Database created') ) + str1 = _('Database created') + else: + #dia = InfoBox( parent=self, str1=_('Database creation failed') ) + str1 = _('Database creation failed') + #dia.add_msg("", True, True) + btns = (gtk.BUTTONS_OK) + dia = gtk.MessageDialog( parent=self, flags=gtk.DIALOG_DESTROY_WITH_PARENT + , type=gtk.MESSAGE_INFO, buttons=(btns), message_format=str1 ) + dia.run() + + return( (status, err_msg, icon, dbms, dbms_num, name, db_desc, user, passwd, host) ) + + def check_fields(self): + """check fields and return true/false according to whether user wants to try again + return False if fields are ok + """ + log.debug("check_fields: starting") + try_again = False + ok = True + + # checks for all db's + if self.e_db_name.get_text() == "": + msg = _("No Database Name given") + ok = False + elif self.e_db_desc.get_text() is None or self.e_db_desc.get_text() == "": + msg = _("No Database Description given") + ok = False + elif self.cb_dbms.get_active_text() != 'Sqlite' and self.e_username.get_text() == "": + msg = _("No Username given") + ok = False + elif self.cb_dbms.get_active_text() != 'Sqlite' and self.e_password.get_text() == "": + msg = _("No Password given") + ok = False + elif self.e_host.get_text() == "": + msg = _("No Host given") + ok = False + + if ok: + if self.cb_dbms.get_active_text() == 'Sqlite': + # checks for sqlite + pass + elif self.cb_dbms.get_active_text() == 'MySQL': + # checks for mysql + pass + elif self.cb_dbms.get_active_text() == 'Postgres': + # checks for postgres + pass + else: + msg = "Unknown Database Type selected" + ok = False + + if not ok: + log.debug("check_fields: open dialog") + dia = gtk.MessageDialog( parent=self + , flags=gtk.DIALOG_DESTROY_WITH_PARENT + , type=gtk.MESSAGE_ERROR + , message_format=msg + , buttons = gtk.BUTTONS_YES_NO + ) + #l = gtk.Label(msg) + #dia.vbox.add(l) + l = gtk.Label( _("Do you want to try again?") ) + dia.vbox.add(l) + dia.show_all() + ret = dia.run() + log.debug("check_fields: ret is "+str(ret)+" cancel is "+str(int(gtk.RESPONSE_CANCEL))) + if ret == gtk.RESPONSE_YES: + try_again = True + log.debug("check_fields: destroy dialog") + dia.hide() + dia.destroy() + + log.debug("check_fields: returning ok as "+str(ok)+", try_again as "+str(try_again)) + return(ok,try_again) + + def db_type_changed(self, widget, data): + if self.cb_dbms.get_active_text() == 'Sqlite': + self.l_username.hide() + self.e_username.hide() + self.e_username.set_text("") + self.l_password.hide() + self.e_password.hide() + self.e_password.set_text("") else: - # add extra label - vbox = dia.vbox - vbox.pack_start( gtk.Label(str1) ) - dia.show_all() + self.l_username.show() + self.e_username.show() + self.l_password.show() + self.e_password.show() + return(response) + + def db_name_changed(self, widget, event, data): + log.debug('db_name_changed: text='+widget.get_text()) + if not re.match('\....$', widget.get_text()): + widget.set_text(widget.get_text()+'.db3') + widget.show() + + #def response_cb(self, dialog, data): + # dialog.destroy() + # return(data) + + +class InfoBox(gtk.Dialog): + + def __init__(self, parent, str1): + # create dialog and add icon and label + btns = (gtk.BUTTONS_OK) + btns = None + # messagedialog puts text in inverse colors if no buttons are displayed?? + #dia = gtk.MessageDialog( parent=self.main_window, flags=gtk.DIALOG_DESTROY_WITH_PARENT + # , type=gtk.MESSAGE_INFO, buttons=(btns), message_format=str1 ) + # so just use Dialog instead + super(InfoBox,self).__init__( parent=parent + , flags=gtk.DIALOG_DESTROY_WITH_PARENT + , title="" ) # , buttons=btns + + h = gtk.HBox(False, 2) + i = gtk.Image() + i.set_from_stock(gtk.STOCK_DIALOG_INFO, gtk.ICON_SIZE_DIALOG) + l = gtk.Label(str1) + h.pack_start(i, padding=5) + h.pack_start(l, padding=5) + self.vbox.pack_start(h) + parent.show_all() + self.show_all() + + def add_msg(self, str1, run, destroy): + # add extra label + self.vbox.pack_start( gtk.Label(str1) ) + self.show_all() response = None - if run: response = dia.run() - if destroy: dia.destroy() - return (dia, response) + if run: response = self.run() + if destroy: self.destroy() + return (response) + + +class SideButton(gtk.Button): + """Create a button with the label below the icon""" + + # to change label on buttons: + # ( see http://faq.pygtk.org/index.py?req=show&file=faq09.005.htp ) + # gtk.stock_add([(gtk.STOCK_ADD, _("Add"), 0, 0, "")]) + + # alternatively: + # button = gtk.Button(stock=gtk.STOCK_CANCEL) + # button.show() + # alignment = button.get_children()[0] + # hbox = alignment.get_children()[0] + # image, label = hbox.get_children() + # label.set_text('Hide') + + def __init__(self, label=None, stock=None, use_underline=True): + gtk.stock_add([(stock, label, 0, 0, "")]) + + super(SideButton, self).__init__(label=label, stock=stock, use_underline=True) + alignment = self.get_children()[0] + hbox = alignment.get_children()[0] + image, label = hbox.get_children() + #label.set_text('Hide') + hbox.remove(image) + hbox.remove(label) + v = gtk.VBox(False, spacing=3) + v.pack_start(image, 3) + v.pack_start(label, 3) + alignment.remove(hbox) + alignment.add(v) + self.show_all() + if __name__=="__main__": From 593006318af0c6f9532128cf46db73e373f49fc3 Mon Sep 17 00:00:00 2001 From: sqlcoder Date: Sat, 28 Aug 2010 23:49:37 +0100 Subject: [PATCH 20/53] more refinements to OnGame parser --- pyfpdb/OnGameToFpdb.py | 96 +++++++++++++++++++++++++++++------------- 1 file changed, 67 insertions(+), 29 deletions(-) diff --git a/pyfpdb/OnGameToFpdb.py b/pyfpdb/OnGameToFpdb.py index 088920d3..b7344ed6 100755 --- a/pyfpdb/OnGameToFpdb.py +++ b/pyfpdb/OnGameToFpdb.py @@ -19,6 +19,13 @@ ######################################################################## import sys +import exceptions + +import logging +# logging has been set up in fpdb.py or HUD_main.py, use their settings: +log = logging.getLogger("parser") + + import Configuration from HandHistoryConverter import * from decimal import Decimal @@ -65,7 +72,6 @@ class OnGame(HandHistoryConverter): # '5 Card Draw' : ('draw','fivedraw') } - #self.rexx.setGameInfoRegex('.*Blinds \$?(?P[.0-9]+)/\$?(?P[.0-9]+)') # Static regexes # ***** End of hand R5-75443872-57 ***** re_SplitHands = re.compile(u'\*\*\*\*\*\sEnd\sof\shand\s[-A-Z\d]+.*\n(?=\*)') @@ -73,6 +79,18 @@ class OnGame(HandHistoryConverter): # ***** History for hand R5-75443872-57 ***** # Start hand: Wed Aug 18 19:29:10 GMT+0100 2010 # Table: someplace [75443872] (LIMIT TEXAS_HOLDEM 0.50/1, Real money) +#***** History for hand R5-78042004-262 ***** +#Start hand: Fri Aug 27 21:40:46 GMT+0100 2010 +#Table: Bamako [78042004] (LIMIT TEXAS_HOLDEM $0.25/$0.50, Real money) +#User: sagi34 +#{ u'BB': None +#, u'DATETIME': u'Fri Aug 27 22:38:26 GMT+0100 2010\\n' +#, u'GAME': None +#, u'HID': u'R5-78042004-346' +#, u'TABLE': u'Bamako' +#, u'LIMIT': None +#, u'SB': None +#} re_HandInfo = re.compile(u""" \*\*\*\*\*\sHistory\sfor\shand\s(?P[-A-Z\d]+).* Start\shand:\s(?P.*) @@ -80,8 +98,8 @@ class OnGame(HandHistoryConverter): ( (?PNo\sLimit|Limit|LIMIT|Pot\sLimit)\s (?PTEXAS_HOLDEM|RAZZ)\s - (?P[.0-9]+)/ - (?P[.0-9]+) + (%(LS)s)?(?P[.0-9]+)/ + (%(LS)s)?(?P[.0-9]+) )? """ % substitutions, re.MULTILINE|re.DOTALL|re.VERBOSE) @@ -102,7 +120,9 @@ class OnGame(HandHistoryConverter): # self.rexx.button_re = re.compile('#SUMMARY\nDealer: (?P.*)\n') #Seat 1: .Lucchess ($4.17 in chips) - re_PlayerInfo = re.compile(u'Seat (?P[0-9]+): (?P.*) \((?P[.0-9]+)\)') + #Seat 1: phantomaas ($27.11) + #Seat 5: mleo17 ($9.37) + re_PlayerInfo = re.compile(u'Seat (?P[0-9]+):\s(?P.*)\s\((%(LS)s)?(?P[.0-9]+)\)' % substitutions) def compilePlayerRegexs(self, hand): players = set([player[1] for player in hand.players]) @@ -117,15 +137,16 @@ class OnGame(HandHistoryConverter): #helander2222 posts blind ($0.25), lopllopl posts blind ($0.50). player_re = "(?P" + "|".join(map(re.escape, players)) + ")" subst = {'PLYR': player_re, 'CUR': self.sym[hand.gametype['currency']]} - self.re_PostSB = re.compile('(?P.*) posts small blind \(\$?(?P[.0-9]+)\)') - self.re_PostBB = re.compile('\), (?P.*) posts big blind \(\$?(?P[.0-9]+)\)') - self.re_Antes = re.compile(r"^%(PLYR)s: posts the ante %(CUR)s(?P[.0-9]+)" % subst, re.MULTILINE) - self.re_BringIn = re.compile(r"^%(PLYR)s: brings[- ]in( low|) for %(CUR)s(?P[.0-9]+)" % subst, re.MULTILINE) - self.re_PostBoth = re.compile('.*\n(?P.*): posts small \& big blinds \(\$? (?P[.0-9]+)\)') + self.re_PostSB = re.compile('(?P.*) posts small blind \((%(CUR)s)?(?P[\.0-9]+)\)' % subst, re.MULTILINE) + self.re_PostBB = re.compile('\), (?P.*) posts big blind \((%(CUR)s)?(?P[\.0-9]+)\)' % subst, re.MULTILINE) + self.re_Antes = re.compile(r"^%(PLYR)s: posts the ante (%(CUR)s)?(?P[\.0-9]+)" % subst, re.MULTILINE) + self.re_BringIn = re.compile(r"^%(PLYR)s: brings[- ]in( low|) for (%(CUR)s)?(?P[\.0-9]+)" % subst, re.MULTILINE) + self.re_PostBoth = re.compile('.*\n(?P.*): posts small \& big blinds \( (%(CUR)s)?(?P[\.0-9]+)\)' % subst) self.re_HeroCards = re.compile('.*\nDealt\sto\s(?P.*)\s\[ (?P.*) \]') #lopllopl checks, Eurolll checks, .Lucchess checks. - self.re_Action = re.compile('(, )?(?P.*?)(?P bets| checks| raises| calls| folds)( (?P\d*\.?\d*))?( and is all-in)?') + #chumley. calls $0.25 + self.re_Action = re.compile('(, )?(?P.*?)(?P bets| checks| raises| calls| folds)( (%(CUR)s)?(?P[\d\.]+))?( and is all-in)?' % subst) #self.re_Board = re.compile(r"\[board cards (?P.+) \]") #Uchilka shows [ KC,JD ] @@ -133,7 +154,14 @@ class OnGame(HandHistoryConverter): # TODO: read SUMMARY correctly for collected pot stuff. #Uchilka, bets $11.75, collects $23.04, net $11.29 - self.re_CollectPot = re.compile('(?P.*), bets.+, collects \$(?P\d*\.?\d*), net.* ') + #like this: + #Main pot: $3.57 won by mleo17 ($3.40) + #Side pot 1: $3.26 won by maac_5 ($3.10) + #Main pot: $2.87 won by maac_5 ($1.37), sagi34 ($1.36) + self.re_Pot = re.compile('(Main|Side)\spot(\s\d+)?:\s.*won\sby\s(?P.*$)', re.MULTILINE) + self.re_CollectPot = re.compile('\s*(?P.*)\s\((%(CUR)s)?(?P[\.\d]+)\)' % subst) + #Seat 5: mleo17 ($3.40), net: +$2.57, [Jd, Qd] (TWO_PAIR QUEEN, JACK) + self.re_ShownCards = re.compile("^Seat (?P[0-9]+): (?P.*) \(.*\), net:.* \[(?P.*)\].*" % subst, re.MULTILINE) self.re_sitsOut = re.compile('(?P.*) sits out') def readSupportedGames(self): @@ -160,7 +188,13 @@ class OnGame(HandHistoryConverter): info['currency'] = 'USD' if 'LIMIT' in mg: - info['limitType'] = self.limits[mg['LIMIT']] + if mg['LIMIT'] in self.limits: + info['limitType'] = self.limits[mg['LIMIT']] + else: + tmp = handText[0:100] + log.error(_("determineGameType: limit not found in self.limits(%s). hand: '%s'") % (str(mg),tmp)) + log.error(_("determineGameType: Raising FpdbParseError")) + raise FpdbParseError(_("limit not found in self.limits(%s). hand: '%s'") % (str(mg),tmp)) if 'GAME' in mg: (info['base'], info['category']) = self.games[mg['GAME']] if 'SB' in mg: @@ -168,6 +202,7 @@ class OnGame(HandHistoryConverter): if 'BB' in mg: info['bb'] = mg['BB'] + #log.debug("determinegametype: returning "+str(info)) return info def readHandInfo(self, hand): @@ -177,7 +212,7 @@ class OnGame(HandHistoryConverter): if m: info.update(m.groupdict()) - log.debug("readHandInfo: %s" % info) + #log.debug("readHandInfo: %s" % info) for key in info: if key == 'DATETIME': #'Wed Aug 18 19:45:30 GMT+0100 2010 @@ -203,6 +238,7 @@ class OnGame(HandHistoryConverter): hand.mixed = None def readPlayerStacks(self, hand): + #log.debug("readplayerstacks: re is '%s'" % self.re_PlayerInfo) m = self.re_PlayerInfo.finditer(hand.handText) for a in m: hand.addPlayer(int(a.group('SEAT')), a.group('PNAME'), a.group('CASH')) @@ -247,15 +283,13 @@ class OnGame(HandHistoryConverter): hand.setCommunityCards(street, m.group('CARDS').split(', ')) def readBlinds(self, hand): - log.debug( _("readBlinds starting") ) + #log.debug( _("readBlinds starting, hand=") + "\n["+hand.handText+"]" ) try: m = self.re_PostSB.search(hand.handText) - if m is None: - log.debug( _("re_postSB failed, hand=") + hand.handText ) hand.addBlind(m.group('PNAME'), 'small blind', m.group('SB')) - except: # no small blind - log.debug( _("readBlinds in noSB exception")+str(sys.exc_info()) ) - hand.addBlind(None, None, None) + except exceptions.AttributeError: # no small blind + log.debug( _("readBlinds in noSB exception - no SB created")+str(sys.exc_info()) ) + #hand.addBlind(None, None, None) for a in self.re_PostBB.finditer(hand.handText): hand.addBlind(a.group('PNAME'), 'big blind', a.group('BB')) for a in self.re_PostBoth.finditer(hand.handText): @@ -309,7 +343,7 @@ class OnGame(HandHistoryConverter): m = self.re_Action.finditer(hand.streets[street]) for action in m: acts = action.groupdict() - #print "DEBUG: acts: %s" %acts + #log.debug("readaction: acts: %s" %acts) if action.group('ATYPE') == ' raises': hand.addRaiseBy( street, action.group('PNAME'), action.group('BET') ) elif action.group('ATYPE') == ' calls': @@ -334,18 +368,22 @@ class OnGame(HandHistoryConverter): hand.addShownCards(cards, shows.group('PNAME')) def readCollectPot(self,hand): - for m in self.re_CollectPot.finditer(hand.handText): - hand.addCollectPot(player=m.group('PNAME'),pot=m.group('POT')) + for m in self.re_Pot.finditer(hand.handText): + for splitpot in m.group('POT').split(','): + for m in self.re_CollectPot.finditer(splitpot): + hand.addCollectPot(player=m.group('PNAME'),pot=m.group('POT')) def readShownCards(self,hand): - return - #for m in self.rexx.collect_pot_re.finditer(hand.string): - #if m.group('CARDS') is not None: - #cards = m.group('CARDS') - #cards = set(cards.split(',')) - #hand.addShownCards(cards=None, player=m.group('PNAME'), holeandboard=cards) + for m in self.re_ShownCards.finditer(hand.handText): + cards = m.group('CARDS') + cards = cards.split(', ') # needs to be a list, not a set--stud needs the order + + (shown, mucked) = (False, False) + if m.group('CARDS') is not None: + shown = True + hand.addShownCards(cards=cards, player=m.group('PNAME'), shown=shown, mucked=mucked) + - if __name__ == "__main__": From 6e3953e7744523fd5e4302f242f596715539d05d Mon Sep 17 00:00:00 2001 From: sqlcoder Date: Sat, 28 Aug 2010 23:57:04 +0100 Subject: [PATCH 21/53] add hand ID to warning message --- pyfpdb/Hand.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyfpdb/Hand.py b/pyfpdb/Hand.py index c32f9f37..377c7ed6 100644 --- a/pyfpdb/Hand.py +++ b/pyfpdb/Hand.py @@ -62,6 +62,7 @@ class Hand(object): def __init__(self, config, sitename, gametype, handText, builtFrom = "HHC"): + #log.debug( _("Hand.init(): handText is ") + str(handText) ) self.config = config #log = Configuration.get_logger("logging.conf", "db", log_dir=self.config.dir_log) self.sitename = sitename @@ -314,7 +315,7 @@ If a player has None chips he won't be added.""" log.debug("markStreets:\n"+ str(self.streets)) else: tmp = self.handText[0:100] - log.error(_("markstreets didn't match - Assuming hand cancelled")) + log.error(_("markstreets didn't match - Assuming hand %s was cancelled") % self.handid) self.cancelled = True raise FpdbParseError(_("FpdbParseError: markStreets appeared to fail: First 100 chars: '%s'") % tmp) From 8f91adc513af425ff61f1af009da3d7358b900af Mon Sep 17 00:00:00 2001 From: sqlcoder Date: Sun, 29 Aug 2010 12:39:54 +0100 Subject: [PATCH 22/53] add log definition --- pyfpdb/DerivedStats.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pyfpdb/DerivedStats.py b/pyfpdb/DerivedStats.py index dde8ecca..d79d49bf 100644 --- a/pyfpdb/DerivedStats.py +++ b/pyfpdb/DerivedStats.py @@ -19,6 +19,10 @@ import Card from decimal import Decimal +import logging +# logging has been set up in fpdb.py or HUD_main.py, use their settings: +log = logging.getLogger("parser") + DEBUG = False if DEBUG: From bf8b826bbcfbb3c9835b4d6933f442fe8c7e235b Mon Sep 17 00:00:00 2001 From: sqlcoder Date: Sun, 29 Aug 2010 12:46:22 +0100 Subject: [PATCH 23/53] copy any missing parts of config from .example --- pyfpdb/Configuration.py | 137 ++++++++++++++++++++++++++-------------- 1 file changed, 91 insertions(+), 46 deletions(-) diff --git a/pyfpdb/Configuration.py b/pyfpdb/Configuration.py index a578bcc9..e9f1521c 100755 --- a/pyfpdb/Configuration.py +++ b/pyfpdb/Configuration.py @@ -82,6 +82,11 @@ def get_exec_path(): def get_config(file_name, fallback = True): """Looks in cwd and in self.default_config_path for a config file.""" + + # look for example file even if not used here, path is returned to caller + config_found,example_found,example_copy = False,False,False + config_path, example_path = None,None + exec_dir = get_exec_path() if file_name == 'logging.conf' and not hasattr(sys, "frozen"): config_path = os.path.join(exec_dir, 'pyfpdb', file_name) @@ -89,17 +94,13 @@ def get_config(file_name, fallback = True): config_path = os.path.join(exec_dir, file_name) # print "config_path=", config_path if os.path.exists(config_path): # there is a file in the cwd - return (config_path,False) # so we use it + config_found = True # so we use it else: # no file in the cwd, look where it should be in the first place default_dir = get_default_config_path() config_path = os.path.join(default_dir, file_name) # print "config path 2=", config_path if os.path.exists(config_path): - return (config_path,False) - -# No file found - if not fallback: - return (False,False) + config_found = True # Example configuration for debian package if os.name == 'posix': @@ -108,38 +109,43 @@ def get_config(file_name, fallback = True): # the config directory for us so there's no need to check it # again example_path = '/usr/share/python-fpdb/' + file_name + '.example' - try: - shutil.copyfile(example_path, config_path) - msg = _("Config file has been created at %s.\n") % config_path - logging.info(msg) - return (config_path,False) - except IOError: - pass + if not config_found and fallback: + try: + shutil.copyfile(example_path, config_path) + example_copy = True + msg = _("Config file has been created at %s.\n") % config_path + logging.info(msg) + except IOError: + pass # OK, fall back to the .example file, should be in the start dir - if os.path.exists(file_name + ".example"): + elif os.path.exists(file_name + ".example"): try: print "" + example_path = file_name + ".example" check_dir(default_dir) - shutil.copyfile(file_name + ".example", config_path) - msg = _("No %s found\n in %s\n or %s\n") % (file_name, exec_dir, default_dir) \ - + _("Config file has been created at %s.\n") % config_path - print msg - logging.info(msg) - file_name = config_path + if not config_found and fallback: + shutil.copyfile(example_path, config_path) + example_copy = True + msg = _("No %s found\n in %s\n or %s\n") % (file_name, exec_dir, default_dir) \ + + _("Config file has been created at %s.\n") % config_path + print msg + logging.info(msg) except: print _("Error copying .example file, cannot fall back. Exiting.\n") sys.stderr.write(_("Error copying .example file, cannot fall back. Exiting.\n")) sys.stderr.write( str(sys.exc_info()) ) sys.exit() - else: + elif fallback: print _("No %s found, cannot fall back. Exiting.\n") % file_name sys.stderr.write(_("No %s found, cannot fall back. Exiting.\n") % file_name) sys.exit() - return (file_name,True) + + #print "get_config: returning "+str( (config_path,example_copy,example_path) ) + return (config_path,example_copy,example_path) def get_logger(file_name, config = "config", fallback = False, log_dir=None, log_file=None): - (conf_file,copied) = get_config(file_name, fallback = fallback) + (conf_file,copied,example_file) = get_config(file_name, fallback = fallback) if log_dir is None: log_dir = os.path.join(get_exec_path(), u'log') @@ -674,7 +680,7 @@ class Config: sys.stderr.write(_("Configuration file %s not found. Using defaults.") % (file)) file = None - if file is None: (file,self.example_copy) = get_config("HUD_config.xml", True) + if file is None: (file,self.example_copy,example_file) = get_config("HUD_config.xml", True) self.file = file self.dir_self = get_exec_path() @@ -685,27 +691,6 @@ class Config: self.log_file = os.path.join(self.dir_log, u'fpdb-log.txt') log = get_logger("logging.conf", "config", log_dir=self.dir_log) -# Parse even if there was no real config file found and we are using the example -# If using the example, we'll edit it later - log.info(_("Reading configuration file %s") % file) - print _("\nReading configuration file %s\n") % file - try: - doc = xml.dom.minidom.parse(file) - self.file_error = None - except: - log.error(_("Error parsing %s. See error log file.") % (file)) - traceback.print_exc(file=sys.stderr) - self.file_error = sys.exc_info()[1] - # we could add a parameter to decide whether to return or read a line and exit? - return - #print "press enter to continue" - #sys.stdin.readline() - #sys.exit() -#ExpatError: not well-formed (invalid token): line 511, column 4 -#sys.exc_info = (, ExpatError('not well-formed (invalid token): line 511, -# column 4',), ) - - self.doc = doc self.supported_sites = {} self.supported_games = {} self.supported_databases = {} # databaseName --> Database instance @@ -717,6 +702,32 @@ class Config: self.emails = {} self.gui_cash_stats = GUICashStats() + added,n = 1,0 # use n to prevent infinite loop if add_missing_elements() fails somehow + while added > 0 and n < 2: + n = n + 1 + log.info(_("Reading configuration file %s") % file) + print _("\nReading configuration file %s\n") % file + try: + doc = xml.dom.minidom.parse(file) + self.doc = doc + self.file_error = None + except: + log.error(_("Error parsing %s. See error log file.") % (file)) + traceback.print_exc(file=sys.stderr) + self.file_error = sys.exc_info()[1] + # we could add a parameter to decide whether to return or read a line and exit? + return + #print "press enter to continue" + #sys.stdin.readline() + #sys.exit() +#ExpatError: not well-formed (invalid token): line 511, column 4 +#sys.exc_info = (, ExpatError('not well-formed (invalid token): line 511, +# column 4',), ) + + if not self.example_copy and example_file is not None: + # reads example file and adds missing elements into current config + added = self.add_missing_elements(doc, example_file) + if doc.getElementsByTagName("general") == []: self.general.get_defaults() for gen_node in doc.getElementsByTagName("general"): @@ -792,7 +803,7 @@ class Config: self.set_db_parameters(db_name = 'fpdb', db_ip = df_parms['db-host'], db_user = df_parms['db-user'], db_pass = df_parms['db-password']) - self.save(file=os.path.join(self.default_config_path, "HUD_config.xml")) + self.save(file=os.path.join(self.dir_config, "HUD_config.xml")) if doc.getElementsByTagName("raw_hands") == []: self.raw_hands = RawHands() @@ -807,6 +818,40 @@ class Config: print "" #end def __init__ + def add_missing_elements(self, doc, example_file): + """ Look through example config file and add any elements that are not in the config + May need to add some 'enabled' attributes to turn things off - can't just delete a + config section now because this will add it back in""" + + nodes_added = 0 + + try: + example_doc = xml.dom.minidom.parse(example_file) + except: + log.error(_("Error parsing example file %s. See error log file.") % (example_file)) + return nodes_added + + for cnode in doc.getElementsByTagName("FreePokerToolsConfig"): + for example_cnode in example_doc.childNodes: + if example_cnode.localName == "FreePokerToolsConfig": + for e in example_cnode.childNodes: + #print "nodetype", e.nodeType, "name", e.localName, "found", len(doc.getElementsByTagName(e.localName)) + if e.nodeType == e.ELEMENT_NODE and doc.getElementsByTagName(e.localName) == []: + new = doc.importNode(e, True) # True means do deep copy + t_node = self.doc.createTextNode(" ") + cnode.appendChild(t_node) + cnode.appendChild(new) + t_node = self.doc.createTextNode("\r\n\r\n") + cnode.appendChild(t_node) + print "... adding missing config section: " + e.localName + nodes_added = nodes_added + 1 + + if nodes_added > 0: + print "Added %d missing config sections\n" % nodes_added + self.save() + + return nodes_added + def set_hhArchiveBase(self, path): self.imp.node.setAttribute("hhArchiveBase", path) From a81dd66f227cd52f2669ca175c78977abd8dd1f8 Mon Sep 17 00:00:00 2001 From: Erki Ferenc Date: Sun, 29 Aug 2010 14:26:38 +0200 Subject: [PATCH 24/53] l10n: updated Hungarian translation --- pyfpdb/locale/fpdb-hu_HU.po | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/pyfpdb/locale/fpdb-hu_HU.po b/pyfpdb/locale/fpdb-hu_HU.po index bbf68785..5d4b6e45 100644 --- a/pyfpdb/locale/fpdb-hu_HU.po +++ b/pyfpdb/locale/fpdb-hu_HU.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.20.905 plus git\n" "POT-Creation-Date: 2010-08-29 14:22+CEST\n" -"PO-Revision-Date: 2010-08-28 12:32+0200\n" +"PO-Revision-Date: 2010-08-29 14:25+0200\n" "Last-Translator: Ferenc Erki \n" "Language-Team: Hungarian \n" "Language: hu\n" @@ -854,8 +854,8 @@ msgid "" "GuiBulkImport done: Stored: %d \tDuplicates: %d \tPartial: %d \tErrors: %d " "in %s seconds - %.0f/sec" msgstr "" -"GuiBulkImport kész: Tárolt: %d \tDuplikáció: %d \tRészleges: %d \tHibák: %d " -"%s másodperc alatt - %.0f/mp" +"GuiBulkImport kész: Tárolt: %d \tDuplikáció: %d \tRészleges: %d \tHibák: %d %" +"s másodperc alatt - %.0f/mp" #: GuiDatabase.py:106 GuiLogView.py:96 msgid "Refresh" @@ -1306,11 +1306,11 @@ msgstr "\"%s\" nevű asztal már nem létezik\n" #: HUD_main.pyw:321 msgid "" -"HUD_main.read_stdin: hand read in %4.3f seconds (%4.3f,%4.3f,%4.3f,%4.3f," -"%4.3f,%4.3f)" +"HUD_main.read_stdin: hand read in %4.3f seconds (%4.3f,%4.3f,%4.3f,%4.3f,%" +"4.3f,%4.3f)" msgstr "" -"HUD_main.read_stdin: leosztás beolvasva %4.3f mp alatt (%4.3f,%4.3f,%4.3f," -"%4.3f,%4.3f,%4.3f)" +"HUD_main.read_stdin: leosztás beolvasva %4.3f mp alatt (%4.3f,%4.3f,%4.3f,%" +"4.3f,%4.3f,%4.3f)" #: HUD_run_me.py:45 msgid "HUD_main starting\n" @@ -2527,14 +2527,13 @@ msgid " - press return to continue\n" msgstr " - nyomj ENTER-t a folytatáshoz\n" #: fpdb.pyw:55 -#, fuzzy msgid "" "\n" "python 2.5-2.7 not found, please install python 2.5, 2.6 or 2.7 for fpdb\n" msgstr "" "\n" -"Python 2.5 nincs meg, kérlek telepítsd a Python 2.5-öt, 2.6-ot, vagy 2.7-et " -"az fpdb számára\n" +"Python 2.5-2.7 nem található, kérlek telepítsd a Python 2.5-öt, 2.6-ot, vagy " +"2.7-et az fpdb számára\n" #: fpdb.pyw:56 fpdb.pyw:68 fpdb.pyw:90 msgid "Press ENTER to continue." @@ -2551,7 +2550,6 @@ msgstr "" "http://sourceforge.net/projects/pywin32/" #: fpdb.pyw:89 -#, fuzzy msgid "" "Unable to load PyGTK modules required for GUI. Please install PyCairo, " "PyGObject, and PyGTK from www.pygtk.org." @@ -2680,13 +2678,13 @@ msgid "" msgstr "Jelenleg nem lehetséges olyat választani, hogy \"üres\" vagy hasonló." #: fpdb.pyw:439 -#, fuzzy msgid "" "To configure things like colouring you will still have to use the " "Preferences dialogue or manually edit your HUD_config.xml." msgstr "" -"Bizonyos dolgok (pl. színezés) beállításához egyelőre még kézzel kell " -"szerkesztened a HUD_config.xml fájlt." +"Bizonyos dolgok (pl. színezés) beállításához egyelőre még a Beállítások " +"menüpontot kell használnod, vagy kézzel kell szerkesztened a HUD_config.xml " +"fájlt." #: fpdb.pyw:546 msgid "Confirm deleting and recreating tables" @@ -2701,12 +2699,12 @@ msgstr "" "már vannak táblák az adatbázisban (" #: fpdb.pyw:548 -#, fuzzy msgid "" " they will be deleted and you will have to re-import your histories.\n" "This may take a while." msgstr "" -"), akkor azok törölve lesznek.\n" +"), akkor azok törölve lesznek, és újra kell importálnod a " +"leosztástörténeteket.\n" "Ja, és ez eltarthat egy darabig:)" #: fpdb.pyw:573 @@ -3140,8 +3138,8 @@ msgstr "" "GPL2 vagy újabb licensszel.\n" "A Windows telepítő csomag tartalmaz MIT licensz hatálya alá eső részeket " "is.\n" -"A licenszek szövegét megtalálod az fpdb főkönyvtárában az agpl-3.0.txt, " -"gpl-2.0.txt, gpl-3.0.txt és mit.txt fájlokban." +"A licenszek szövegét megtalálod az fpdb főkönyvtárában az agpl-3.0.txt, gpl-" +"2.0.txt, gpl-3.0.txt és mit.txt fájlokban." #: fpdb.pyw:1078 msgid "Help" From 641b863cbf80e588a36df05c98ee95124c87fb0b Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 14:37:29 +0200 Subject: [PATCH 25/53] l10n: update mo files --- pyfpdb/locale/de/LC_MESSAGES/fpdb.mo | Bin 1048 -> 7463 bytes pyfpdb/locale/hu/LC_MESSAGES/fpdb.mo | Bin 64382 -> 64610 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/pyfpdb/locale/de/LC_MESSAGES/fpdb.mo b/pyfpdb/locale/de/LC_MESSAGES/fpdb.mo index 291c02d07d070c90c03e5dbad86cca418d8d7d00..eed07f34f8ceb70e4deaedb2e68839d2b3a7dc43 100644 GIT binary patch literal 7463 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 delta 390 zcmZ2(HG`x6o)F7a1|Z-AVi_Rr0dbJPA0V3xi2p)q4n_!H7)r|lX02*e-@y_g|%D3nfs z(%C>7sF9%zNP`^R4WvO9&jQjQikM zay*_4Hp%&UB}Mr;cEOVwIYfB^ic;g#Qj1dal2eN(@8Ppy@lDLkn=Hq#F}a4{iOo#G z(89`e@)3R|c2f}3#BlRlehtRS=|b|TM%9am@x{Al<`tKu=H!&-rKjdic9F5=@<=Q# PD9KIDJG^J|dKn7Ore-*Vr??#SO4r4F^ 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 U_^^drZe@CB6_-4`^=i=n00z60=Kufz delta 11801 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 Date: Sun, 29 Aug 2010 15:19:04 +0200 Subject: [PATCH 26/53] gentoo: add combined ebuild --- packaging/gentoo/fpdb-all.ebuild | 90 ++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 packaging/gentoo/fpdb-all.ebuild diff --git a/packaging/gentoo/fpdb-all.ebuild b/packaging/gentoo/fpdb-all.ebuild new file mode 100644 index 00000000..49e20d50 --- /dev/null +++ b/packaging/gentoo/fpdb-all.ebuild @@ -0,0 +1,90 @@ +# Copyright 1999-2010 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI="2" + +inherit eutils +inherit games +if [[ ${PV} = 9999* ]]; then + inherit git +fi + +NEED_PYTHON=2.6 + +DESCRIPTION="A free/open source tracker/HUD for use with online poker" +HOMEPAGE="http://fpdb.wiki.sourceforge.net/" +if [[ ${PV} = 9999* ]]; then + EGIT_REPO_URI="git://git.assembla.com/fpdb.git" + KEYWORDS="" + IUSE="graph mysql postgres sqlite linguas_hu linguas_it" +elif [[ ${PV} = 0.20.90* ]]; then + SRC_URI="mirror://sourceforge/${PN}/Snapshots/${P}.tar.bz2" + KEYWORDS="~amd64 ~x86" + IUSE="graph mysql postgres sqlite linguas_hu linguas_it" +else; then + SRC_URI="mirror://sourceforge/${PN}/${PV}/${P}.tar.bz2" + KEYWORDS="~amd64 ~x86" + IUSE="graph mysql postgres sqlite" +fi + +LICENSE="AGPL-3" +SLOT="0" + +RDEPEND=" + mysql? ( virtual/mysql + dev-python/mysql-python ) + postgres? ( dev-db/postgresql-server + dev-python/psycopg ) + sqlite? ( dev-lang/python[sqlite] + dev-python/numpy ) + >=x11-libs/gtk+-2.10 + dev-python/pygtk + graph? ( dev-python/numpy + dev-python/matplotlib[gtk] ) + dev-python/python-xlib + dev-python/pytz" +DEPEND="${RDEPEND}" + +if [[ ${PV} = 9999* ]]; then + src_unpack() { + git_src_unpack + } +fi + +src_install() { + insinto "${GAMES_DATADIR}"/${PN} + doins -r gfx + doins -r pyfpdb + + if [[ ${PV} >= 0.20.901 ]]; then + if use linguas_hu; then + dosym "${GAMES_DATADIR}"/${PN}/pyfpdb/locale/hu/LC_MESSAGES/${PN}.mo /usr/share/locale/hu/LC_MESSAGES/${PN}.mo + fi + + if use linguas_it; then + dosym "${GAMES_DATADIR}"/${PN}/pyfpdb/locale/it/LC_MESSAGES/${PN}.mo /usr/share/locale/it/LC_MESSAGES/${PN}.mo + fi + fi + + doins readme.txt + + exeinto "${GAMES_DATADIR}"/${PN} + doexe run_fpdb.py + + dodir "${GAMES_BINDIR}" + dosym "${GAMES_DATADIR}"/${PN}/run_fpdb.py "${GAMES_BINDIR}"/${PN} + + newicon gfx/fpdb-icon.png ${PN}.png + make_desktop_entry ${PN} + + chmod +x "${D}/${GAMES_DATADIR}"/${PN}/pyfpdb/*.pyw + prepgamesdirs +} + +pkg_postinst() { + games_pkg_postinst + elog "Note that if you really want to use mysql or postgresql you will have to create" + elog "the database and user yourself and enter it into the fpdb config." + elog "You can find the instructions on the project's website." +} From c6a9baa31f1fecbfac3404ac039124984c160d43 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 15:37:26 +0200 Subject: [PATCH 27/53] gentoo: fix bash errors and repoman complaints --- packaging/gentoo/fpdb-all.ebuild | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packaging/gentoo/fpdb-all.ebuild b/packaging/gentoo/fpdb-all.ebuild index 49e20d50..36a0823e 100644 --- a/packaging/gentoo/fpdb-all.ebuild +++ b/packaging/gentoo/fpdb-all.ebuild @@ -7,25 +7,25 @@ EAPI="2" inherit eutils inherit games if [[ ${PV} = 9999* ]]; then - inherit git + inherit git fi NEED_PYTHON=2.6 DESCRIPTION="A free/open source tracker/HUD for use with online poker" HOMEPAGE="http://fpdb.wiki.sourceforge.net/" +IUSE="graph mysql postgres sqlite" if [[ ${PV} = 9999* ]]; then EGIT_REPO_URI="git://git.assembla.com/fpdb.git" KEYWORDS="" - IUSE="graph mysql postgres sqlite linguas_hu linguas_it" + IUSE="${IUSE} linguas_hu linguas_it" elif [[ ${PV} = 0.20.90* ]]; then SRC_URI="mirror://sourceforge/${PN}/Snapshots/${P}.tar.bz2" KEYWORDS="~amd64 ~x86" - IUSE="graph mysql postgres sqlite linguas_hu linguas_it" -else; then + IUSE="${IUSE} linguas_hu linguas_it" +else SRC_URI="mirror://sourceforge/${PN}/${PV}/${P}.tar.bz2" KEYWORDS="~amd64 ~x86" - IUSE="graph mysql postgres sqlite" fi LICENSE="AGPL-3" @@ -57,7 +57,7 @@ src_install() { doins -r gfx doins -r pyfpdb - if [[ ${PV} >= 0.20.901 ]]; then + if [[ ${PV} > 0.20.900 ]]; then if use linguas_hu; then dosym "${GAMES_DATADIR}"/${PN}/pyfpdb/locale/hu/LC_MESSAGES/${PN}.mo /usr/share/locale/hu/LC_MESSAGES/${PN}.mo fi From 909b47cdbb5588ecb7a3c497c1d60eb38d7911dd Mon Sep 17 00:00:00 2001 From: Erki Ferenc Date: Sun, 29 Aug 2010 17:03:49 +0200 Subject: [PATCH 28/53] ebuild: added LINGUAS_DE, removed LINGUAS_IT, cleaned up checks --- packaging/gentoo/fpdb-all.ebuild | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/packaging/gentoo/fpdb-all.ebuild b/packaging/gentoo/fpdb-all.ebuild index 36a0823e..65b5e9ec 100644 --- a/packaging/gentoo/fpdb-all.ebuild +++ b/packaging/gentoo/fpdb-all.ebuild @@ -18,11 +18,15 @@ IUSE="graph mysql postgres sqlite" if [[ ${PV} = 9999* ]]; then EGIT_REPO_URI="git://git.assembla.com/fpdb.git" KEYWORDS="" - IUSE="${IUSE} linguas_hu linguas_it" + IUSE="${IUSE} linguas_de linguas_hu" elif [[ ${PV} = 0.20.90* ]]; then SRC_URI="mirror://sourceforge/${PN}/Snapshots/${P}.tar.bz2" KEYWORDS="~amd64 ~x86" - IUSE="${IUSE} linguas_hu linguas_it" + if [[ ${PV} > 0.20.906 ]]; then + IUSE="${IUSE} linguas_de linguas_hu" + elif [[ ${PV} > 0.20.904 ]]; then + IUSE="${IUSE} linguas_hu" + fi else SRC_URI="mirror://sourceforge/${PN}/${PV}/${P}.tar.bz2" KEYWORDS="~amd64 ~x86" @@ -57,14 +61,17 @@ src_install() { doins -r gfx doins -r pyfpdb - if [[ ${PV} > 0.20.900 ]]; then + if [[ ${PV} > 0.20.904 ]]; then if use linguas_hu; then - dosym "${GAMES_DATADIR}"/${PN}/pyfpdb/locale/hu/LC_MESSAGES/${PN}.mo /usr/share/locale/hu/LC_MESSAGES/${PN}.mo + msgfmt pyfpdb/locale/fpdb-hu_HU.po -o pyfpdb/locale/hu.mo fi + domo pyfpdb/locale/*.mo - if use linguas_it; then - dosym "${GAMES_DATADIR}"/${PN}/pyfpdb/locale/it/LC_MESSAGES/${PN}.mo /usr/share/locale/it/LC_MESSAGES/${PN}.mo + elif [[ ${PV} > 0.20.906 ]]; then + if use linguas_de; then + msgfmt pyfpdb/locale/fpdb-de_DE.po -o pyfpdb/locale/de.mo fi + domo pyfpdb/locale/*.mo fi doins readme.txt From 8a4e33c14c7839a22be0295a575ae41f5bf69821 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 17:37:21 +0200 Subject: [PATCH 29/53] gentoo: back to split ebuilds as recommended by sunrise on IRC --- packaging/gentoo/current_stable.ebuild | 2 +- packaging/gentoo/current_testing.ebuild | 12 ++- packaging/gentoo/dev-readme.txt | 5 -- packaging/gentoo/fpdb-9999.ebuild | 17 +++-- packaging/gentoo/fpdb-all.ebuild | 97 ------------------------- 5 files changed, 15 insertions(+), 118 deletions(-) delete mode 100644 packaging/gentoo/fpdb-all.ebuild diff --git a/packaging/gentoo/current_stable.ebuild b/packaging/gentoo/current_stable.ebuild index edc70791..23e9d147 100644 --- a/packaging/gentoo/current_stable.ebuild +++ b/packaging/gentoo/current_stable.ebuild @@ -7,7 +7,7 @@ EAPI="2" inherit eutils inherit games -NEED_PYTHON=2.5 +NEED_PYTHON=2.6 DESCRIPTION="A free/open source tracker/HUD for use with online poker" HOMEPAGE="http://fpdb.wiki.sourceforge.net/" diff --git a/packaging/gentoo/current_testing.ebuild b/packaging/gentoo/current_testing.ebuild index 9741f2b8..db7d9bb6 100644 --- a/packaging/gentoo/current_testing.ebuild +++ b/packaging/gentoo/current_testing.ebuild @@ -7,7 +7,7 @@ EAPI="2" inherit eutils inherit games -NEED_PYTHON=2.5 +NEED_PYTHON=2.6 DESCRIPTION="A free/open source tracker/HUD for use with online poker" HOMEPAGE="http://fpdb.wiki.sourceforge.net/" @@ -18,7 +18,7 @@ SLOT="0" KEYWORDS="~amd64 ~x86" #note: this should work on other architectures too, please send me your experiences -IUSE="graph mysql postgres sqlite linguas_hu linguas_it" +IUSE="graph mysql postgres sqlite linguas_hu" RDEPEND=" mysql? ( virtual/mysql dev-python/mysql-python ) @@ -40,12 +40,10 @@ src_install() { doins -r pyfpdb if use linguas_hu; then - dosym "${GAMES_DATADIR}"/${PN}/pyfpdb/locale/hu/LC_MESSAGES/${PN}.mo /usr/share/locale/hu/LC_MESSAGES/${PN}.mo - fi - - if use linguas_it; then - dosym "${GAMES_DATADIR}"/${PN}/pyfpdb/locale/it/LC_MESSAGES/${PN}.mo /usr/share/locale/it/LC_MESSAGES/${PN}.mo + msgfmt pyfpdb/locale/fpdb-hu_HU.po -o pyfpdb/locale/hu.mo fi + + domo pyfpdb/locale/*.mo doins readme.txt diff --git a/packaging/gentoo/dev-readme.txt b/packaging/gentoo/dev-readme.txt index b81776fc..0effdf1b 100644 --- a/packaging/gentoo/dev-readme.txt +++ b/packaging/gentoo/dev-readme.txt @@ -1,10 +1,5 @@ Repoman currently gives the following errors for our ebuilds: ebuild.allmasked: This error can be ignored, as all our packages are supposed to be masked - ebuild.badheader 3 - games-util/fpdb/fpdb-0.20.1.ebuild: Malformed CVS Header on line: 3 - games-util/fpdb/fpdb-0.20.904.ebuild: Malformed CVS Header on line: 3 - games-util/fpdb/fpdb-9999.ebuild: Malformed CVS Header on line: 3 - not sure what the correct header is for a sunrise ebuild so leaving as-is for now Useful Links: http://overlays.gentoo.org/proj/sunrise/wiki/SunriseFaq diff --git a/packaging/gentoo/fpdb-9999.ebuild b/packaging/gentoo/fpdb-9999.ebuild index 683b3f45..2ed31832 100644 --- a/packaging/gentoo/fpdb-9999.ebuild +++ b/packaging/gentoo/fpdb-9999.ebuild @@ -8,7 +8,7 @@ inherit eutils inherit games inherit git -NEED_PYTHON=2.5 +NEED_PYTHON=2.6 DESCRIPTION="A free/open source tracker/HUD for use with online poker" HOMEPAGE="http://fpdb.wiki.sourceforge.net/" @@ -17,9 +17,8 @@ EGIT_REPO_URI="git://git.assembla.com/fpdb.git" LICENSE="AGPL-3" SLOT="0" KEYWORDS="" -#note: this should work on other architectures too, please send me your experiences -IUSE="graph mysql postgres sqlite linguas_hu linguas_it" +IUSE="graph mysql postgres sqlite linguas_de linguas_hu" RDEPEND=" mysql? ( virtual/mysql dev-python/mysql-python ) @@ -44,13 +43,15 @@ src_install() { doins -r gfx doins -r pyfpdb + if use linguas_de; then + msgfmt pyfpdb/locale/fpdb-de_DE.po -o pyfpdb/locale/de.mo + fi + if use linguas_hu; then - dosym "${GAMES_DATADIR}"/${PN}/pyfpdb/locale/hu/LC_MESSAGES/${PN}.mo /usr/share/locale/hu/LC_MESSAGES/${PN}.mo - fi - - if use linguas_it; then - dosym "${GAMES_DATADIR}"/${PN}/pyfpdb/locale/it/LC_MESSAGES/${PN}.mo /usr/share/locale/it/LC_MESSAGES/${PN}.mo + msgfmt pyfpdb/locale/fpdb-hu_HU.po -o pyfpdb/locale/hu.mo fi + + domo pyfpdb/locale/*.mo doins readme.txt diff --git a/packaging/gentoo/fpdb-all.ebuild b/packaging/gentoo/fpdb-all.ebuild deleted file mode 100644 index 65b5e9ec..00000000 --- a/packaging/gentoo/fpdb-all.ebuild +++ /dev/null @@ -1,97 +0,0 @@ -# Copyright 1999-2010 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: $ - -EAPI="2" - -inherit eutils -inherit games -if [[ ${PV} = 9999* ]]; then - inherit git -fi - -NEED_PYTHON=2.6 - -DESCRIPTION="A free/open source tracker/HUD for use with online poker" -HOMEPAGE="http://fpdb.wiki.sourceforge.net/" -IUSE="graph mysql postgres sqlite" -if [[ ${PV} = 9999* ]]; then - EGIT_REPO_URI="git://git.assembla.com/fpdb.git" - KEYWORDS="" - IUSE="${IUSE} linguas_de linguas_hu" -elif [[ ${PV} = 0.20.90* ]]; then - SRC_URI="mirror://sourceforge/${PN}/Snapshots/${P}.tar.bz2" - KEYWORDS="~amd64 ~x86" - if [[ ${PV} > 0.20.906 ]]; then - IUSE="${IUSE} linguas_de linguas_hu" - elif [[ ${PV} > 0.20.904 ]]; then - IUSE="${IUSE} linguas_hu" - fi -else - SRC_URI="mirror://sourceforge/${PN}/${PV}/${P}.tar.bz2" - KEYWORDS="~amd64 ~x86" -fi - -LICENSE="AGPL-3" -SLOT="0" - -RDEPEND=" - mysql? ( virtual/mysql - dev-python/mysql-python ) - postgres? ( dev-db/postgresql-server - dev-python/psycopg ) - sqlite? ( dev-lang/python[sqlite] - dev-python/numpy ) - >=x11-libs/gtk+-2.10 - dev-python/pygtk - graph? ( dev-python/numpy - dev-python/matplotlib[gtk] ) - dev-python/python-xlib - dev-python/pytz" -DEPEND="${RDEPEND}" - -if [[ ${PV} = 9999* ]]; then - src_unpack() { - git_src_unpack - } -fi - -src_install() { - insinto "${GAMES_DATADIR}"/${PN} - doins -r gfx - doins -r pyfpdb - - if [[ ${PV} > 0.20.904 ]]; then - if use linguas_hu; then - msgfmt pyfpdb/locale/fpdb-hu_HU.po -o pyfpdb/locale/hu.mo - fi - domo pyfpdb/locale/*.mo - - elif [[ ${PV} > 0.20.906 ]]; then - if use linguas_de; then - msgfmt pyfpdb/locale/fpdb-de_DE.po -o pyfpdb/locale/de.mo - fi - domo pyfpdb/locale/*.mo - fi - - doins readme.txt - - exeinto "${GAMES_DATADIR}"/${PN} - doexe run_fpdb.py - - dodir "${GAMES_BINDIR}" - dosym "${GAMES_DATADIR}"/${PN}/run_fpdb.py "${GAMES_BINDIR}"/${PN} - - newicon gfx/fpdb-icon.png ${PN}.png - make_desktop_entry ${PN} - - chmod +x "${D}/${GAMES_DATADIR}"/${PN}/pyfpdb/*.pyw - prepgamesdirs -} - -pkg_postinst() { - games_pkg_postinst - elog "Note that if you really want to use mysql or postgresql you will have to create" - elog "the database and user yourself and enter it into the fpdb config." - elog "You can find the instructions on the project's website." -} From a9e06b9cf40fd134f11611c27a9e4131a645312b Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 17:43:52 +0200 Subject: [PATCH 30/53] gentoo: update changelog --- packaging/gentoo/ChangeLog | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/packaging/gentoo/ChangeLog b/packaging/gentoo/ChangeLog index f72a9a13..57aaabe6 100644 --- a/packaging/gentoo/ChangeLog +++ b/packaging/gentoo/ChangeLog @@ -2,6 +2,19 @@ # Distributed under the terms of the GNU General Public License v2 # created by Steffen Schaumburg, steffen@schaumburger.info + 29 Aug 2010; Erki Ferenc + fpdb-0.20.906.ebuild, fpdb-9999.ebuild: + improve l10n handling + + 29 Aug 2010; Steffen Schaumburg + fpdb-0.20.1.ebuild, fpdb-0.20.906.ebuild, fpdb-9999.ebuild: + change required python version to 2.6 + +*fpdb-0.20.906 (29 Aug 2010) + 29 Aug 2010; Steffen Schaumburg + +fpdb-0.20.906.ebuild -fpdb-0.20.904.ebuild: + Bump version + *fpdb-0.20.1 fpdb-0.20.904 fpdb-9999 (17 Aug 2010) 17 Aug 2010; Steffen Schaumburg From 71bda38c5e6106361acd03fdefcfef7626a191b7 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 17:51:05 +0200 Subject: [PATCH 31/53] gentoo: update manifest, removing trailing whitespaces --- packaging/gentoo/Manifest | 10 +++++----- packaging/gentoo/current_testing.ebuild | 6 +++--- packaging/gentoo/fpdb-9999.ebuild | 10 +++++----- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packaging/gentoo/Manifest b/packaging/gentoo/Manifest index 2b12bcf1..1096a2e6 100644 --- a/packaging/gentoo/Manifest +++ b/packaging/gentoo/Manifest @@ -1,7 +1,7 @@ DIST fpdb-0.20.1.tar.bz2 662807 RMD160 b5f22a684c605ddbba7d2154005a822b02a19490 SHA1 e4cc40de5849d3ae33a680d917b340ab37c6448b SHA256 46eff0625f300c070ce88c519ae6019f6e1c98a7725733c5e16b50a058247fe3 -DIST fpdb-0.20.904.tar.bz2 632871 RMD160 6af83a9b30e8b3f394b011a4dc92937f130b9e15 SHA1 083c51f1627f901e24801bf6abebf1d07646bd89 SHA256 5e72055fe7ebb0c6048282f8edc972ee01be21063d6f8071abef22111f3e82f9 -EBUILD fpdb-0.20.1.ebuild 1591 RMD160 56ccbca72353e56718a927178e58d148177f5846 SHA1 770df692b29b7314d70703010e1f6afac623c3f3 SHA256 e3f434df58d98760a118458166f9fdfcf3612712c78c704f089f6e8ec72bd224 -EBUILD fpdb-0.20.904.ebuild 1595 RMD160 b5cbcdb8d2984b149c833db8b6aee362168e9c7d SHA1 7151fd3cef087c38060b44adb622843a84209f33 SHA256 41c6ed71aa0ff727d670c94cc72cf595bcd038f601121e51222532df727a6d01 -EBUILD fpdb-9999.ebuild 1618 RMD160 843d309bbc2ccdd95dbb4b0eb08571d8e16d06ad SHA1 b1ebdbe0e40bd6c0d4ec417dd2b8a135884547a6 SHA256 72205c1f94bcf2c3f310d396928e357fabaee4861773044c1dac71f98f6596bf -MISC ChangeLog 395 RMD160 b195ccf198011356ca79b16071093c4d92e5927a SHA1 9aa56e5dc9c5d03b62fb60bc81069f3440b1f606 SHA256 b7ba8c180da0e6a405d939c4485f9c8e52fdcafb04207ef6de217a807015bd03 +DIST fpdb-0.20.906.tar.bz2 702558 RMD160 bc5d01ef4899502aea33f286ac4274ef7ef498ef SHA1 9791680d53de1b276dc0297ac43a0e11758d3e19 SHA256 9ae706d5e9c2a2ee031d2b222ba46e088993cc892fc08b5276bbfd5e44a0436b +EBUILD fpdb-0.20.1.ebuild 1508 RMD160 7585cd1de73172649e182782d427a476afed4036 SHA1 3c92d6dbb868b8b4c26b75539771641087742761 SHA256 9a7d302016e4c4d6cc18af14514bd5112d18aeb7dc6390a3413e3e4cc71da6bd +EBUILD fpdb-0.20.906.ebuild 1643 RMD160 ed44ee49d715458b54edbbe054eb5c9775c6ac7a SHA1 ebd8ea291ace0671d4eb264754dfb0616373a51a SHA256 a9bdad768a0ab5ef065f3e6e2e1bd89dded6e0d3b64c4771944c4aae7d163efd +EBUILD fpdb-9999.ebuild 1685 RMD160 f06457ead33dca99c0acf830f26bbf2f8ca12cd1 SHA1 70444fa4a88439955472407ec0b072970993631a SHA256 2df59120b376bb4e5966f8a719bc881c756b3210b7a30d394ee1753efbfd706e +MISC ChangeLog 831 RMD160 efd32886d09b0750e680716030c0034c3a280a25 SHA1 82f3eda3cd83cbba3e45d4b75593e74f3dd4f568 SHA256 d74efef05cf51ef3840ef043218c8a30c1bcccfa9d9d2e4ca1b7198ed1c91f29 MISC metadata.xml 550 RMD160 a6fa8799f644c0882f832a12cc9e6a0f4f09ae7f SHA1 3a40c442cadb1f532e0299040c2da79e9721dd4f SHA256 b5a1c538de3786446a87479b1023cdb4f084085feb7290959619739969ce7d3b diff --git a/packaging/gentoo/current_testing.ebuild b/packaging/gentoo/current_testing.ebuild index db7d9bb6..4d95b85b 100644 --- a/packaging/gentoo/current_testing.ebuild +++ b/packaging/gentoo/current_testing.ebuild @@ -40,10 +40,10 @@ src_install() { doins -r pyfpdb if use linguas_hu; then - msgfmt pyfpdb/locale/fpdb-hu_HU.po -o pyfpdb/locale/hu.mo + msgfmt pyfpdb/locale/fpdb-hu_HU.po -o pyfpdb/locale/hu.mo fi - - domo pyfpdb/locale/*.mo + + domo pyfpdb/locale/*.mo doins readme.txt diff --git a/packaging/gentoo/fpdb-9999.ebuild b/packaging/gentoo/fpdb-9999.ebuild index 2ed31832..480d8158 100644 --- a/packaging/gentoo/fpdb-9999.ebuild +++ b/packaging/gentoo/fpdb-9999.ebuild @@ -44,14 +44,14 @@ src_install() { doins -r pyfpdb if use linguas_de; then - msgfmt pyfpdb/locale/fpdb-de_DE.po -o pyfpdb/locale/de.mo + msgfmt pyfpdb/locale/fpdb-de_DE.po -o pyfpdb/locale/de.mo fi - + if use linguas_hu; then - msgfmt pyfpdb/locale/fpdb-hu_HU.po -o pyfpdb/locale/hu.mo + msgfmt pyfpdb/locale/fpdb-hu_HU.po -o pyfpdb/locale/hu.mo fi - - domo pyfpdb/locale/*.mo + + domo pyfpdb/locale/*.mo doins readme.txt From 2ff55401ca5ba41c98905162e3b2e318bc476778 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 18:25:41 +0200 Subject: [PATCH 32/53] gentoo: update ebuilds with sunrise suggestions (only testing done fully) --- packaging/gentoo/current_stable.ebuild | 7 ++----- packaging/gentoo/current_testing.ebuild | 25 +++++++++++-------------- packaging/gentoo/fpdb-9999.ebuild | 8 ++------ 3 files changed, 15 insertions(+), 25 deletions(-) diff --git a/packaging/gentoo/current_stable.ebuild b/packaging/gentoo/current_stable.ebuild index 23e9d147..666c7fee 100644 --- a/packaging/gentoo/current_stable.ebuild +++ b/packaging/gentoo/current_stable.ebuild @@ -4,10 +4,7 @@ EAPI="2" -inherit eutils -inherit games - -NEED_PYTHON=2.6 +inherit eutils games DESCRIPTION="A free/open source tracker/HUD for use with online poker" HOMEPAGE="http://fpdb.wiki.sourceforge.net/" @@ -49,7 +46,7 @@ src_install() { newicon gfx/fpdb-icon.png ${PN}.png make_desktop_entry ${PN} - chmod +x "${D}/${GAMES_DATADIR}"/${PN}/pyfpdb/*.pyw + fperms +x "${GAMES_DATADIR}"/${PN}/pyfpdb/*.pyw prepgamesdirs } diff --git a/packaging/gentoo/current_testing.ebuild b/packaging/gentoo/current_testing.ebuild index 4d95b85b..525200fb 100644 --- a/packaging/gentoo/current_testing.ebuild +++ b/packaging/gentoo/current_testing.ebuild @@ -4,10 +4,7 @@ EAPI="2" -inherit eutils -inherit games - -NEED_PYTHON=2.6 +inherit eutils games DESCRIPTION="A free/open source tracker/HUD for use with online poker" HOMEPAGE="http://fpdb.wiki.sourceforge.net/" @@ -36,27 +33,27 @@ DEPEND="${RDEPEND}" src_install() { insinto "${GAMES_DATADIR}"/${PN} - doins -r gfx - doins -r pyfpdb + doins -r gfx || die "failed to install gfx directory" + doins -r pyfpdb || die "failed to install pyfpdb directory" if use linguas_hu; then - msgfmt pyfpdb/locale/fpdb-hu_HU.po -o pyfpdb/locale/hu.mo + msgfmt pyfpdb/locale/fpdb-hu_HU.po -o pyfpdb/locale/hu.mo || die "failed to create hungarian mo file" fi - domo pyfpdb/locale/*.mo + domo pyfpdb/locale/*.mo || die "failed to install mo files" - doins readme.txt + doins readme.txt || die "failed to install readme.txt file" exeinto "${GAMES_DATADIR}"/${PN} - doexe run_fpdb.py + doexe run_fpdb.py || die "failed to install executable run_fpdb.py" dodir "${GAMES_BINDIR}" - dosym "${GAMES_DATADIR}"/${PN}/run_fpdb.py "${GAMES_BINDIR}"/${PN} + dosym "${GAMES_DATADIR}"/${PN}/run_fpdb.py "${GAMES_BINDIR}"/${PN} || die "failed to create symlink for starting fpdb" - newicon gfx/fpdb-icon.png ${PN}.png - make_desktop_entry ${PN} + newicon gfx/fpdb-icon.png ${PN}.png || die "failed to install fpdb icon" + make_desktop_entry ${PN} || die "failed to create desktop entry" - chmod +x "${D}/${GAMES_DATADIR}"/${PN}/pyfpdb/*.pyw + fperms +x "${GAMES_DATADIR}"/${PN}/pyfpdb/*.pyw prepgamesdirs } diff --git a/packaging/gentoo/fpdb-9999.ebuild b/packaging/gentoo/fpdb-9999.ebuild index 480d8158..a2469183 100644 --- a/packaging/gentoo/fpdb-9999.ebuild +++ b/packaging/gentoo/fpdb-9999.ebuild @@ -4,11 +4,7 @@ EAPI="2" -inherit eutils -inherit games -inherit git - -NEED_PYTHON=2.6 +inherit eutils games git DESCRIPTION="A free/open source tracker/HUD for use with online poker" HOMEPAGE="http://fpdb.wiki.sourceforge.net/" @@ -64,7 +60,7 @@ src_install() { newicon gfx/fpdb-icon.png ${PN}.png make_desktop_entry ${PN} - chmod +x "${D}/${GAMES_DATADIR}"/${PN}/pyfpdb/*.pyw + fperms +x "${GAMES_DATADIR}"/${PN}/pyfpdb/*.pyw prepgamesdirs } From 168b1146463978d8afb2fe9f264bc4e51dd775b1 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 19:12:48 +0200 Subject: [PATCH 33/53] l10n: some minor string changes --- pyfpdb/GuiAutoImport.py | 20 ++++++++++---------- pyfpdb/fpdb.pyw | 19 +++++++++---------- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/pyfpdb/GuiAutoImport.py b/pyfpdb/GuiAutoImport.py index c386f475..8170fd9f 100755 --- a/pyfpdb/GuiAutoImport.py +++ b/pyfpdb/GuiAutoImport.py @@ -113,7 +113,7 @@ class GuiAutoImport (threading.Thread): hbox.pack_start(lbl1, expand=True, fill=False) self.doAutoImportBool = False - self.startButton = gtk.ToggleButton(_(" Start _Autoimport ")) + self.startButton = gtk.ToggleButton(_(" Start _Auto Import ")) self.startButton.connect("clicked", self.startClicked, "start clicked") hbox.pack_start(self.startButton, expand=False, fill=False) @@ -132,7 +132,7 @@ class GuiAutoImport (threading.Thread): scrolledwindow.add(self.textview) self.mainVBox.show_all() - self.addText(_("AutoImport Ready.")) + self.addText(_("Auto Import Ready.")) def addText(self, text): end_iter = self.textbuffer.get_end_iter() @@ -145,7 +145,7 @@ class GuiAutoImport (threading.Thread): """runs when user clicks one of the browse buttons in the auto import tab""" current_path=data[1].get_text() - dia_chooser = gtk.FileChooserDialog(title=_("Please choose the path that you want to auto import"), + dia_chooser = gtk.FileChooserDialog(title=_("Please choose the path that you want to Auto Import"), action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK)) #dia_chooser.set_current_folder(pathname) @@ -179,9 +179,9 @@ class GuiAutoImport (threading.Thread): def reset_startbutton(self): if self.pipe_to_hud is not None: - self.startButton.set_label(_(u' Stop _Autoimport ')) + self.startButton.set_label(_(u' Stop _Auto Import ')) else: - self.startButton.set_label(_(u' Start _Autoimport ')) + self.startButton.set_label(_(u' Start _Auto Import ')) return False @@ -206,7 +206,7 @@ class GuiAutoImport (threading.Thread): if self.settings['global_lock'].acquire(False): # returns false immediately if lock not acquired self.addText(_("\nGlobal lock taken ... Auto Import Started.\n")) self.doAutoImportBool = True - widget.set_label(_(u' _Stop Autoimport ')) + widget.set_label(_(u' _Stop Auto Import ')) if self.pipe_to_hud is None: if Configuration.FROZEN: path = Configuration.EXEC_PATH @@ -246,19 +246,19 @@ class GuiAutoImport (threading.Thread): self.importtimer = gobject.timeout_add(interval * 1000, self.do_import) else: - self.addText(_("\nauto-import aborted - global lock not available")) + self.addText(_("\nAuto Import aborted - global lock not available")) else: # toggled off gobject.source_remove(self.importtimer) self.settings['global_lock'].release() self.doAutoImportBool = False # do_import will return this and stop the gobject callback timer - self.addText(_("\nStopping autoimport - global lock released.")) + self.addText(_("\nStopping Auto Import - global lock released.")) if self.pipe_to_hud.poll() is not None: - self.addText(_("\n * Stop Autoimport: HUD already terminated")) + self.addText(_("\n * Stop Auto Import: HUD already terminated")) else: #print >>self.pipe_to_hud.stdin, "\n" self.pipe_to_hud.communicate('\n') # waits for process to terminate self.pipe_to_hud = None - self.startButton.set_label(_(u' Start _Autoimport ')) + self.startButton.set_label(_(u' Start _Auto Import ')) #end def GuiAutoImport.startClicked diff --git a/pyfpdb/fpdb.pyw b/pyfpdb/fpdb.pyw index cefc87ac..d6cf4015 100755 --- a/pyfpdb/fpdb.pyw +++ b/pyfpdb/fpdb.pyw @@ -876,8 +876,7 @@ class fpdb: if self.config.example_copy: self.info_box(_("Config file") , _("has been created at:\n%s.\n") % self.config.file - + _("Edit your screen_name and hand history path in the supported_sites ") - + _("section of the Preferences window (Main menu) before trying to import hands.")) + + _("Edit your screen_name and hand history path in the supported_sites section of the Preferences window (Main menu) before trying to import hands.")) self.settings = {} self.settings['global_lock'] = self.lock if (os.sep=="/"): @@ -906,10 +905,10 @@ class fpdb: err_msg = _("MySQL client reports: 2002 or 2003 error. Unable to connect - ") \ + _("Please check that the MySQL service has been started") except Exceptions.FpdbPostgresqlAccessDenied: - err_msg = _("Postgres Server reports: Access denied. Are your permissions set correctly?") + err_msg = _("PostgreSQL Server reports: Access denied. Are your permissions set correctly?") except Exceptions.FpdbPostgresqlNoDatabase: - err_msg = _("Postgres client reports: Unable to connect - ") \ - + _("Please check that the Postgres service has been started") + err_msg = _("PostgreSQL client reports: Unable to connect - ") \ + + _("Please check that the PostgreSQL service has been started") if err_msg is not None: self.db = None self.warning_box(err_msg) @@ -966,10 +965,10 @@ class fpdb: def obtain_global_lock(self, source): ret = self.lock.acquire(source=source) # will return false if lock is already held if ret: - print _("\nGlobal lock taken by"), source + print (_("\nGlobal lock taken by %s") % source) self.lockTakenBy=source else: - print _("\nFailed to get global lock, it is currently held by"), source + print (_("\nFailed to get global lock, it is currently held by %s") % source) return ret # need to release it later: # self.lock.release() @@ -1134,8 +1133,8 @@ You can find the full license texts in agpl-3.0.txt, gpl-2.0.txt, gpl-3.0.txt an if not options.errorsToConsole: fileName = os.path.join(self.config.dir_log, 'fpdb-errors.txt') - print _("\nNote: error output is being diverted to fpdb-errors.txt and HUD-errors.txt in:\n") \ - + self.config.dir_log + _("\nAny major error will be reported there _only_.\n") + print (_("\nNote: error output is being diverted to fpdb-errors.txt and HUD-errors.txt in: %s") % self.config.dir_log) \ + + _("\nAny major error will be reported there _only_.\n") errorFile = open(fileName, 'w', 0) sys.stderr = errorFile @@ -1239,7 +1238,7 @@ You can find the full license texts in agpl-3.0.txt, gpl-2.0.txt, gpl-3.0.txt an hhdir = hhbase if not os.path.isdir(hhdir): diapath = gtk.MessageDialog(parent=None, flags=0, type=gtk.MESSAGE_WARNING, buttons=(gtk.BUTTONS_YES_NO), message_format="Setup hh dir") - diastring = _("WARNING: Unable to find output hh directory %s\n\n Press YES to create this directory, or NO to select a new one.") % hhdir + diastring = _("WARNING: Unable to find output hand history directory %s\n\n Press YES to create this directory, or NO to select a new one.") % hhdir diapath.format_secondary_text(diastring) response = diapath.run() diapath.destroy() From 14ea4714b9c81b1d7b0c78ad2fc4645e26e07293 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 19:17:13 +0200 Subject: [PATCH 34/53] l10n: rename template po file to .pot, merge scripts --- pyfpdb/locale/create-mo-files.sh | 4 ---- pyfpdb/locale/create-po-file.sh | 4 ---- pyfpdb/locale/{fpdb-en_GB.po => fpdb-en_GB.pot} | 0 pyfpdb/locale/localise.sh | 14 ++++++++++++++ pyfpdb/locale/update-po-files.sh | 3 --- 5 files changed, 14 insertions(+), 11 deletions(-) delete mode 100755 pyfpdb/locale/create-mo-files.sh delete mode 100755 pyfpdb/locale/create-po-file.sh rename pyfpdb/locale/{fpdb-en_GB.po => fpdb-en_GB.pot} (100%) create mode 100755 pyfpdb/locale/localise.sh delete mode 100755 pyfpdb/locale/update-po-files.sh diff --git a/pyfpdb/locale/create-mo-files.sh b/pyfpdb/locale/create-mo-files.sh deleted file mode 100755 index 5df25bcb..00000000 --- a/pyfpdb/locale/create-mo-files.sh +++ /dev/null @@ -1,4 +0,0 @@ -cd .. -python /usr/share/doc/python-2.7/examples/Tools/i18n/msgfmt.py --output-file=locale/hu/LC_MESSAGES/fpdb.mo locale/fpdb-hu_HU.po -python /usr/share/doc/python-2.7/examples/Tools/i18n/msgfmt.py --output-file=locale/de/LC_MESSAGES/fpdb.mo locale/fpdb-de_DE.po - diff --git a/pyfpdb/locale/create-po-file.sh b/pyfpdb/locale/create-po-file.sh deleted file mode 100755 index 49adc81f..00000000 --- a/pyfpdb/locale/create-po-file.sh +++ /dev/null @@ -1,4 +0,0 @@ -cd .. -rm *.pyc -python /usr/share/doc/python-2.7/examples/Tools/i18n/pygettext.py --output-dir=locale --default-domain=fpdb --output=fpdb-en_GB.po *.py* - diff --git a/pyfpdb/locale/fpdb-en_GB.po b/pyfpdb/locale/fpdb-en_GB.pot similarity index 100% rename from pyfpdb/locale/fpdb-en_GB.po rename to pyfpdb/locale/fpdb-en_GB.pot diff --git a/pyfpdb/locale/localise.sh b/pyfpdb/locale/localise.sh new file mode 100755 index 00000000..89fba06f --- /dev/null +++ b/pyfpdb/locale/localise.sh @@ -0,0 +1,14 @@ +cd .. +rm *.pyc + +echo "creating template po file" +python /usr/share/doc/python-2.7/examples/Tools/i18n/pygettext.py --output-dir=locale --default-domain=fpdb --output=fpdb-en_GB.pot *.py* + +echo "merging template with existing translations" +msgmerge --update locale/fpdb-hu_HU.po locale/fpdb-en_GB.pot +msgmerge --update locale/fpdb-de_DE.po locale/fpdb-en_GB.pot + +echo "compiling mo files" +python /usr/share/doc/python-2.7/examples/Tools/i18n/msgfmt.py --output-file=locale/hu/LC_MESSAGES/fpdb.mo locale/fpdb-hu_HU.po +python /usr/share/doc/python-2.7/examples/Tools/i18n/msgfmt.py --output-file=locale/de/LC_MESSAGES/fpdb.mo locale/fpdb-de_DE.po + diff --git a/pyfpdb/locale/update-po-files.sh b/pyfpdb/locale/update-po-files.sh deleted file mode 100755 index f39b143d..00000000 --- a/pyfpdb/locale/update-po-files.sh +++ /dev/null @@ -1,3 +0,0 @@ -msgmerge --update fpdb-hu_HU.po fpdb-en_GB.po -msgmerge --update fpdb-de_DE.po fpdb-en_GB.po - From 3990b40e3db7023a6c1f027ae19fd527165de343 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 20:35:16 +0200 Subject: [PATCH 35/53] Some string changes, mostly consistency to make translation easier --- pyfpdb/Filters.py | 6 +++--- pyfpdb/GuiBulkImport.py | 2 +- pyfpdb/GuiDatabase.py | 12 +++++++----- pyfpdb/fpdb.pyw | 5 +++-- pyfpdb/fpdb_import.py | 8 ++++---- 5 files changed, 18 insertions(+), 15 deletions(-) diff --git a/pyfpdb/Filters.py b/pyfpdb/Filters.py index 4bbc6057..136c0ab6 100644 --- a/pyfpdb/Filters.py +++ b/pyfpdb/Filters.py @@ -63,7 +63,7 @@ class Filters(threading.Thread): ,'seatsbetween':_('Between:'), 'seatsand':_('And:'), 'seatsshow':_('Show Number of _Players') ,'playerstitle':_('Hero:'), 'sitestitle':_('Sites:'), 'gamestitle':_('Games:') ,'limitstitle':_('Limits:'), 'seatstitle':_('Number of Players:') - ,'groupstitle':_('Grouping:'), 'posnshow':_('Show Position Stats:') + ,'groupstitle':_('Grouping:'), 'posnshow':_('Show Position Stats') ,'datestitle':_('Date:') ,'groupsall':_('All Players') ,'limitsFL':'FL', 'limitsNL':'NL', 'limitsPL':'PL', 'ring':_('Ring'), 'tour':_('Tourney') @@ -891,7 +891,7 @@ class Filters(threading.Thread): hbox = gtk.HBox() vbox1.pack_start(hbox, False, True, 0) - lbl_start = gtk.Label('From:') + lbl_start = gtk.Label(_('From:')) btn_start = gtk.Button() btn_start.set_image(gtk.image_new_from_stock(gtk.STOCK_INDEX, gtk.ICON_SIZE_BUTTON)) @@ -905,7 +905,7 @@ class Filters(threading.Thread): hbox = gtk.HBox() vbox1.pack_start(hbox, False, True, 0) - lbl_end = gtk.Label(' To:') + lbl_end = gtk.Label(_('To:')) btn_end = gtk.Button() btn_end.set_image(gtk.image_new_from_stock(gtk.STOCK_INDEX, gtk.ICON_SIZE_BUTTON)) btn_end.connect('clicked', self.__calendar_dialog, self.end_date) diff --git a/pyfpdb/GuiBulkImport.py b/pyfpdb/GuiBulkImport.py index 943a81fd..a90f566c 100755 --- a/pyfpdb/GuiBulkImport.py +++ b/pyfpdb/GuiBulkImport.py @@ -136,7 +136,7 @@ class GuiBulkImport(): #self.settings['global_lock'].release() self.settings['global_lock'].release() else: - print _("bulk-import aborted - global lock not available") + print _("bulk import aborted - global lock not available") def get_vbox(self): """returns the vbox of this thread""" diff --git a/pyfpdb/GuiDatabase.py b/pyfpdb/GuiDatabase.py index 599f0a7e..e85e3057 100755 --- a/pyfpdb/GuiDatabase.py +++ b/pyfpdb/GuiDatabase.py @@ -300,7 +300,7 @@ class GuiDatabase: self.dia.show() except: err = traceback.extract_tb(sys.exc_info()[2])[-1] - print _('loaddbs error: ')+str(dbms_num)+','+host+','+name+','+user+','+passwd+' failed: ' \ + print _('loadDbs error: ')+str(dbms_num)+','+host+','+name+','+user+','+passwd+' failed: ' \ + err[2] + "(" + str(err[1]) + "): " + str(sys.exc_info()[1]) def sortCols(self, col, n): @@ -368,7 +368,7 @@ class GuiDatabase: try: # is creating empty db for sqlite ... mod db.py further? # add noDbTables flag to db.py? - log.debug(_("loaddbs: trying to connect to: %s/%s, %s, %s/%s") % (str(dbms_num),dbms,name,user,passwd)) + log.debug(_("testDB: trying to connect to: %s/%s, %s, %s/%s") % (str(dbms_num),dbms,name,user,passwd)) db.connect(backend=dbms_num, host=host, database=name, user=user, password=passwd, create=False) if db.connected: log.debug(_(" connected ok")) @@ -384,14 +384,16 @@ class GuiDatabase: status = "failed" icon = gtk.STOCK_CANCEL except Exceptions.FpdbMySQLNoDatabase: - err_msg = _("MySQL client reports: 2002 or 2003 error. Unable to connect - Please check that the MySQL service has been started") + err_msg = _("MySQL client reports: 2002 or 2003 error. Unable to connect - ") \ + + _("Please check that the MySQL service has been started") status = "failed" icon = gtk.STOCK_CANCEL except Exceptions.FpdbPostgresqlAccessDenied: - err_msg = _("Postgres Server reports: Access denied. Are your permissions set correctly?") + err_msg = _("PostgreSQL Server reports: Access denied. Are your permissions set correctly?") status = "failed" except Exceptions.FpdbPostgresqlNoDatabase: - err_msg = _("Postgres client reports: Unable to connect - Please check that the Postgres service has been started") + err_msg = _("PostgreSQL client reports: Unable to connect - ") \ + + _("Please check that the PostgreSQL service has been started") status = "failed" icon = gtk.STOCK_CANCEL except: diff --git a/pyfpdb/fpdb.pyw b/pyfpdb/fpdb.pyw index d6cf4015..0cfe49ed 100755 --- a/pyfpdb/fpdb.pyw +++ b/pyfpdb/fpdb.pyw @@ -544,8 +544,9 @@ class fpdb: #lock_released = False dia_confirm = gtk.MessageDialog(parent=self.window, flags=gtk.DIALOG_DESTROY_WITH_PARENT, type=gtk.MESSAGE_WARNING, buttons=(gtk.BUTTONS_YES_NO), message_format=_("Confirm deleting and recreating tables")) - diastring = _("Please confirm that you want to (re-)create the tables. If there already are tables in the database ") \ - +self.db.database+" on "+self.db.host+_(" they will be deleted and you will have to re-import your histories.\nThis may take a while.") + diastring = _("Please confirm that you want to (re-)create the tables.") \ + + (_(" If there already are tables in the database %s on %s they will be deleted and you will have to re-import your histories.\n") % (self.db.database, self.db.host)) \ + + _("This may take a while.") dia_confirm.format_secondary_text(diastring)#todo: make above string with bold for db, host and deleted # disable windowclose, do not want the the underlying processing interrupted mid-process dia_confirm.set_deletable(False) diff --git a/pyfpdb/fpdb_import.py b/pyfpdb/fpdb_import.py index 8ff2ba86..39550a17 100755 --- a/pyfpdb/fpdb_import.py +++ b/pyfpdb/fpdb_import.py @@ -224,7 +224,7 @@ class Importer: #print " adding file ", file self.addImportFile(os.path.join(dir, file), site, filter) else: - log.warning(_("Attempted to add non-directory: '%s' as an import directory") % str(dir)) + log.warning(_("Attempted to add non-directory '%s' as an import directory") % str(dir)) def runImport(self): """"Run full import on self.filelist. This is called from GuiBulkImport.py""" @@ -310,7 +310,7 @@ class Importer: toterrors += errors for i in xrange( self.settings['threads'] ): - print _("sending finish msg qlen ="), q.qsize() + print _("sending finish message queue length ="), q.qsize() db.send_finish_msg(q) return (totstored, totdups, totpartial, toterrors) @@ -436,9 +436,9 @@ class Importer: # Load filter, process file, pass returned filename to import_fpdb_file if self.settings['threads'] > 0 and self.writeq is not None: - log.info(_("Converting ") + file + " (" + str(q.qsize()) + ")") + log.info((_("Converting %s") % file) + " (" + str(q.qsize()) + ")") else: - log.info(_("Converting ") + file) + log.info(_("Converting %s") % file) hhbase = self.config.get_import_parameters().get("hhArchiveBase") hhbase = os.path.expanduser(hhbase) hhdir = os.path.join(hhbase,site) From f6d5d2f9fcd8fc9894299e903bd5f13a3b9926a4 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 20:35:33 +0200 Subject: [PATCH 36/53] fpdb.pyw: remove unneeded unused method --- pyfpdb/fpdb.pyw | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/pyfpdb/fpdb.pyw b/pyfpdb/fpdb.pyw index 0cfe49ed..94beac23 100755 --- a/pyfpdb/fpdb.pyw +++ b/pyfpdb/fpdb.pyw @@ -756,24 +756,6 @@ class fpdb: def dia_save_profile(self, widget, data=None): self.warning_box(_("Unimplemented: Save Profile (try saving a HUD layout, that should do it)")) - def diaSetupWizard(self, path): - diaSetupWizard = gtk.Dialog(title=_("Fatal Error - Config File Missing"), parent=None, flags=0, buttons=(gtk.STOCK_QUIT,gtk.RESPONSE_OK)) - - label = gtk.Label(_("Please copy the config file from the docs folder to:")) - diaSetupWizard.vbox.add(label) - label.show() - - label = gtk.Label(path) - diaSetupWizard.vbox.add(label) - label.show() - - label = gtk.Label(_("and edit it according to the install documentation at http://fpdb.sourceforge.net")) - diaSetupWizard.vbox.add(label) - label.show() - - response = diaSetupWizard.run() - sys.exit(1) - def get_menu(self, window): """returns the menu for this program""" fpdbmenu = """ From 8efa4d5a9cd6b7ff45ce57c255953ba9810d8587 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 20:46:01 +0200 Subject: [PATCH 37/53] slightly improve error message --- pyfpdb/Configuration.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyfpdb/Configuration.py b/pyfpdb/Configuration.py index e9f1521c..31151358 100755 --- a/pyfpdb/Configuration.py +++ b/pyfpdb/Configuration.py @@ -132,8 +132,8 @@ def get_config(file_name, fallback = True): print msg logging.info(msg) except: - print _("Error copying .example file, cannot fall back. Exiting.\n") - sys.stderr.write(_("Error copying .example file, cannot fall back. Exiting.\n")) + print _("Error copying .example config file, cannot fall back. Exiting.\n") + sys.stderr.write(_("Error copying .example config file, cannot fall back. Exiting.\n")) sys.stderr.write( str(sys.exc_info()) ) sys.exit() elif fallback: From d53b0f7f2af3baebe0994832601943fc4caef20e Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 20:46:21 +0200 Subject: [PATCH 38/53] l10n: german now 1/3 complete, update pot/po/mo files --- pyfpdb/locale/de/LC_MESSAGES/fpdb.mo | Bin 7463 -> 20424 bytes pyfpdb/locale/fpdb-de_DE.po | 1158 ++++++++++++++------------ pyfpdb/locale/fpdb-en_GB.pot | 851 ++++++++++--------- pyfpdb/locale/fpdb-hu_HU.po | 1003 ++++++++++++---------- pyfpdb/locale/hu/LC_MESSAGES/fpdb.mo | Bin 64610 -> 59291 bytes pyfpdb/locale/localise.sh | 1 + 6 files changed, 1629 insertions(+), 1384 deletions(-) diff --git a/pyfpdb/locale/de/LC_MESSAGES/fpdb.mo b/pyfpdb/locale/de/LC_MESSAGES/fpdb.mo index eed07f34f8ceb70e4deaedb2e68839d2b3a7dc43..ae007611f0d5cdb7fd5668fce4dc3508fb32db9a 100644 GIT binary patch literal 20424 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 LZ0ng;(H>LP*e delta 1906 zcmYM!TWl0n9LMpqSc;aG!fsm%lyFKZl$J}ov>?kR7P<>{X;F&=i%6#Jba%AO!t5*! zD7H}nBcg!=MibPiA*4PT7tlTsFVRR8A`fZ;UgCq1Hxdbn`l5dS+aWgH`J6dBb1uLC zX)nJWIu{%HC0uk`@w1gr4WCn!6+##uQfJ zHI#+j#E2SEYSO(*Eu*6fYcY=VF@;U|5^lkZ7{+_ z1$Y%Df!nCDioq&y6`sQ_IFhAthlbQNJ#FHFXHh0HNJ{EWl%1YM%BVgH`Y)kG`6WuU zzam4aKT)2W%<3XI73F>&$^z<i7UBCX%-=4t4{32 z9axWfl!aVJIed45{!-#x%zYGPp2q`IfnJ#W<%>f>$BTg`@U6hH!1IBh1b&TDy6^EA z-a;wWLAD*mcQA$Dq5PGsW&85|V<<_Cj&NN~<21J7wt8j-WwUCA*cOgoQppqzv^!;va=an5cQA^t;JQi4_Sj6!_V|=iQ{G5r2e@7Xxh@7M( z)hH9zA>~v{uo%}P2U^8Z27DyY3HnD-4%hLZ{|%IJK0uA*DDU6E64}~K8ZzD}hN87s`R=mC=p&oav+!{(dFX7g%muQ^;X(_F1+ zh;&%K)n{dG-Q!!nll7hcthrd(T$`YONKcHqRBz0khN7cBi>kd&AV!)tjSr^<_OauV&oBTv_wQg2pMHZ4Izy zGgd!Zmh)WufZn~`v4?FhzkOjWRI%Om3NLiJgBfoR3(UB&e6*o06wdh>-MMFP#`Cr1 z4(QE~c9>&}Pnm|sCi7WiMOD_?&l+`Z?||jo1A3rO)3D6-rg%|HYbtp>3Xda%FRCPk);A*`7|= z=^6t^Dk4Cm- z3h6D~y}|Z99`s3YP3L&XgpxD!j^+)iT7L|`nb5Li>!yXL2^)sam(r(;7_x4ZtZ N, 2010. msgid "" msgstr "" "Project-Id-Version: 0.20.905 plus git\n" -"POT-Creation-Date: 2010-08-29 14:22+CEST\n" -"PO-Revision-Date: 2010-08-29 14:20+0200\n" +"POT-Creation-Date: 2010-08-29 20:42+CEST\n" +"PO-Revision-Date: 2010-08-29 20:45+0200\n" "Last-Translator: Steffen Schaumburg \n" "Language-Team: Fpdb\n" "Language: de\n" @@ -36,19 +35,19 @@ msgstr "" msgid "No bringin found" msgstr "" -#: BetfairToFpdb.py:206 OnGameToFpdb.py:308 PokerStarsToFpdb.py:440 +#: BetfairToFpdb.py:206 OnGameToFpdb.py:339 PokerStarsToFpdb.py:441 msgid "DEBUG: unimplemented readAction: '%s' '%s'" msgstr "" -#: BetfairToFpdb.py:229 PartyPokerToFpdb.py:522 PokerStarsToFpdb.py:467 +#: BetfairToFpdb.py:229 PartyPokerToFpdb.py:525 PokerStarsToFpdb.py:468 msgid "parse input hand history" msgstr "" -#: BetfairToFpdb.py:230 PartyPokerToFpdb.py:523 PokerStarsToFpdb.py:468 +#: BetfairToFpdb.py:230 PartyPokerToFpdb.py:526 PokerStarsToFpdb.py:469 msgid "output translation to" msgstr "" -#: BetfairToFpdb.py:231 PartyPokerToFpdb.py:524 PokerStarsToFpdb.py:469 +#: BetfairToFpdb.py:231 PartyPokerToFpdb.py:527 PokerStarsToFpdb.py:470 msgid "follow (tail -f) the input" msgstr "" @@ -58,104 +57,111 @@ msgstr "" #: Charset.py:45 Charset.py:60 Charset.py:75 Charset.py:86 Charset.py:94 msgid "Could not convert: \"%s\"\n" -msgstr "" +msgstr "Konnte \"%s\" nicht konvertieren.\n" #: Charset.py:48 Charset.py:63 Charset.py:78 msgid "Could not encode: \"%s\"\n" -msgstr "" +msgstr "Konnte \"%s% nicht kodieren.\n" -#: Configuration.py:113 Configuration.py:126 +#: Configuration.py:116 Configuration.py:131 msgid "Config file has been created at %s.\n" -msgstr "" +msgstr "Konfigurationsdatei %s wurde erstellt.\n" -#: Configuration.py:125 +#: Configuration.py:130 msgid "" "No %s found\n" " in %s\n" " or %s\n" msgstr "" -#: Configuration.py:131 Configuration.py:132 -msgid "Error copying .example file, cannot fall back. Exiting.\n" -msgstr "" +#: Configuration.py:135 Configuration.py:136 +msgid "Error copying .example config file, cannot fall back. Exiting.\n" +msgstr "Fehler beim Kopieren der .example Konfigurationsdatei, Fallback " +"fehlgeschlagen. Beende fpdb.\n" -#: Configuration.py:136 Configuration.py:137 +#: Configuration.py:140 Configuration.py:141 msgid "No %s found, cannot fall back. Exiting.\n" -msgstr "" +msgstr "Keine %s gefunden, Fallback nicht möglich. Beende fpdb.\n" -#: Configuration.py:167 +#: Configuration.py:173 msgid "Default logger initialised for " msgstr "" -#: Configuration.py:168 +#: Configuration.py:174 msgid "Default logger intialised for " msgstr "" -#: Configuration.py:179 Database.py:438 Database.py:439 +#: Configuration.py:185 Database.py:438 Database.py:439 msgid "Creating directory: '%s'" -msgstr "" +msgstr "Erstelle Verzeichnis \"%s\"" -#: Configuration.py:205 +#: Configuration.py:211 msgid "" "Default encoding set to US-ASCII, defaulting to CP1252 instead -- If you're " "not on a Mac, please report this problem." msgstr "" -#: Configuration.py:303 +#: Configuration.py:309 msgid "Loading site" msgstr "" -#: Configuration.py:520 +#: Configuration.py:526 msgid "config.general: adding %s = %s" msgstr "" -#: Configuration.py:567 Configuration.py:568 +#: Configuration.py:573 Configuration.py:574 msgid "bad number in xalignment was ignored" msgstr "" -#: Configuration.py:616 +#: Configuration.py:622 msgid "missing config section raw_hands" msgstr "" -#: Configuration.py:622 +#: Configuration.py:628 msgid "Invalid config value for raw_hands.save, defaulting to \"error\"" msgstr "" -#: Configuration.py:629 +#: Configuration.py:635 msgid "Invalid config value for raw_hands.compression, defaulting to \"none\"" msgstr "" -#: Configuration.py:642 +#: Configuration.py:648 msgid "missing config section raw_tourneys" msgstr "" -#: Configuration.py:648 +#: Configuration.py:654 msgid "Invalid config value for raw_tourneys.save, defaulting to \"error\"" msgstr "" -#: Configuration.py:655 +#: Configuration.py:661 msgid "" "Invalid config value for raw_tourneys.compression, defaulting to \"none\"" msgstr "" -#: Configuration.py:673 Configuration.py:674 +#: Configuration.py:679 Configuration.py:680 msgid "Configuration file %s not found. Using defaults." msgstr "" -#: Configuration.py:690 +#: Configuration.py:708 msgid "Reading configuration file %s" -msgstr "" +msgstr "Lese Konfigurationsdatei %s" -#: Configuration.py:691 +#: Configuration.py:709 msgid "" "\n" "Reading configuration file %s\n" msgstr "" +"\n" +"Lese Konfigurationsdatei %s\n" -#: Configuration.py:696 +#: Configuration.py:715 msgid "Error parsing %s. See error log file." msgstr "" +#: Configuration.py:831 +msgid "Error parsing example file %s. See error log file." +msgstr "" + #: Database.py:74 msgid "Not using sqlalchemy connection pool." msgstr "" @@ -449,211 +455,229 @@ msgstr "" msgid "get_stats took: %4.3f seconds" msgstr "" -#: Database.py:2373 Tables.py:448 +#: Database.py:2373 msgid "press enter to continue" msgstr "" #: Filters.py:62 msgid "All" -msgstr "" +msgstr "Alle" #: Filters.py:62 msgid "None" -msgstr "" +msgstr "Keine" #: Filters.py:62 msgid "Show _Limits" -msgstr "" +msgstr "_Limits anzeigen" #: Filters.py:63 msgid "Show Number of _Players" -msgstr "" +msgstr "_Spielerzahl anzeigen" #: Filters.py:63 TourneyFilters.py:60 msgid "And:" -msgstr "" +msgstr "Und:" #: Filters.py:63 TourneyFilters.py:60 msgid "Between:" -msgstr "" +msgstr "Zwischen:" #: Filters.py:64 msgid "Games:" -msgstr "" +msgstr "Spiele:" #: Filters.py:64 TourneyFilters.py:59 msgid "Hero:" -msgstr "" +msgstr "Held:" #: Filters.py:64 TourneyFilters.py:59 msgid "Sites:" -msgstr "" +msgstr "Seien:" #: Filters.py:65 msgid "Limits:" -msgstr "" +msgstr "Limits:" #: Filters.py:65 TourneyFilters.py:59 msgid "Number of Players:" -msgstr "" +msgstr "Spielerzahl:" #: Filters.py:66 msgid "Grouping:" -msgstr "" +msgstr "Gruppieren:" #: Filters.py:66 -msgid "Show Position Stats:" -msgstr "" +msgid "Show Position Stats" +msgstr "Positionen Anzeigen" #: Filters.py:67 TourneyFilters.py:60 msgid "Date:" -msgstr "" +msgstr "Datum:" #: Filters.py:68 msgid "All Players" -msgstr "" +msgstr "Alle Spieler" #: Filters.py:69 msgid "Ring" -msgstr "" +msgstr "Ring" #: Filters.py:69 msgid "Tourney" -msgstr "" +msgstr "Tourney" #: Filters.py:103 TourneyFilters.py:116 msgid "Either 0 or more than one site matched (%s) - EEK" -msgstr "" +msgstr "Entweder 0 oder mehr als eine Seite wurden (%s) erkannt" #: Filters.py:313 msgid "%s was toggled %s" -msgstr "" +msgstr "%s wurde auf %s gestellt" #: Filters.py:313 msgid "OFF" -msgstr "" +msgstr "AUS" #: Filters.py:313 msgid "ON" -msgstr "" +msgstr "AN" #: Filters.py:394 msgid "self.sites[%s] set to %s" -msgstr "" +msgstr "self.sites[%s] auf %s gesetzt" #: Filters.py:400 msgid "self.games[%s] set to %s" -msgstr "" +msgstr "self.games[%s] auf %s gesetzt" #: Filters.py:406 msgid "self.limit[%s] set to %s" -msgstr "" +msgstr "self.limit[%s] auf %s gesetzt" #: Filters.py:543 msgid "self.seats[%s] set to %s" -msgstr "" +msgstr "self.seats[%s] auf %s gesetzt" #: Filters.py:549 msgid "self.groups[%s] set to %s" -msgstr "" +msgstr "self.groups[%s] auf %s gesetzt" #: Filters.py:582 msgid "Min # Hands:" -msgstr "" +msgstr "Min. Hände:" #: Filters.py:648 msgid "INFO: No tourney types returned from database" -msgstr "" +msgstr "INFO: Keine Tourney-Arten (TourneyTypes) von der Datenbank erhalten" #: Filters.py:649 msgid "No tourney types returned from database" -msgstr "" +msgstr "Keine Tourney-Arten (TourneyTypes) von der Datenbank erhalten" #: Filters.py:675 Filters.py:764 msgid "INFO: No games returned from database" -msgstr "" +msgstr "INFO: Keine Spielarten (games) von der Datenbank erhalten" #: Filters.py:676 Filters.py:765 msgid "No games returned from database" -msgstr "" +msgstr "Keine Spielarten (games) von der Datenbank erhalten" + +#: Filters.py:894 +msgid "From:" +msgstr "Von:" + +#: Filters.py:908 +msgid "To:" +msgstr "Bis:" #: Filters.py:913 msgid " Clear Dates " -msgstr "" +msgstr " Datum zurücksetzen" -#: Filters.py:940 fpdb.pyw:722 +#: Filters.py:940 fpdb.pyw:723 msgid "Pick a date" -msgstr "" +msgstr "Wählen Sie ein Datum" -#: Filters.py:946 fpdb.pyw:728 +#: Filters.py:946 fpdb.pyw:729 msgid "Done" -msgstr "" +msgstr "Fertig" #: GuiAutoImport.py:85 msgid "Time between imports in seconds:" -msgstr "" +msgstr "Zeit zwischen Imports in Sekunden:" #: GuiAutoImport.py:116 GuiAutoImport.py:184 GuiAutoImport.py:261 -msgid " Start _Autoimport " -msgstr "" +msgid " Start _Auto Import " +msgstr " Starte _Autoimport " #: GuiAutoImport.py:135 -msgid "AutoImport Ready." -msgstr "" +msgid "Auto Import Ready." +msgstr "Autoimport bereit." #: GuiAutoImport.py:148 -msgid "Please choose the path that you want to auto import" -msgstr "" +msgid "Please choose the path that you want to Auto Import" +msgstr "Bitte wählen Sie den Pfad den Sie automatisch importieren möchten" #: GuiAutoImport.py:171 msgid " _Auto Import Running " -msgstr "" +msgstr " _Auto Import läuft " #: GuiAutoImport.py:182 -msgid " Stop _Autoimport " -msgstr "" +msgid " Stop _Auto Import " +msgstr " _Autoimport Anhalten " #: GuiAutoImport.py:207 msgid "" "\n" "Global lock taken ... Auto Import Started.\n" msgstr "" +"\n" +"Globaler Lock genommen ... Autoimport gestartet\n" #: GuiAutoImport.py:209 -msgid " _Stop Autoimport " -msgstr "" +msgid " _Stop Auto Import " +msgstr " Autoimport An_halten" #: GuiAutoImport.py:225 msgid "opening pipe to HUD" -msgstr "" +msgstr "öffne Pipe zum HUD" #: GuiAutoImport.py:237 msgid "" "\n" "*** GuiAutoImport Error opening pipe: " msgstr "" +"\n" +"*** GuiAutoImport Fehler beim Öffnen der Pipe: " #: GuiAutoImport.py:249 msgid "" "\n" -"auto-import aborted - global lock not available" +"Auto Import aborted - global lock not available" msgstr "" +"\n" +"Autoimport abgebrochen - globaler Lock nicht verfügbar" #: GuiAutoImport.py:254 msgid "" "\n" -"Stopping autoimport - global lock released." +"Stopping Auto Import - global lock released." msgstr "" +"\n" +"Autoimport wird angehalten - globaler Lock freigegeben" #: GuiAutoImport.py:256 msgid "" "\n" -" * Stop Autoimport: HUD already terminated" +" * Stop Auto Import: HUD already terminated" msgstr "" +"\n" +" * Autoimport anhalten: HUD ist bereits beendet" #: GuiAutoImport.py:283 msgid "Browse..." -msgstr "" +msgstr "Durchsuchen..." #: GuiAutoImport.py:326 GuiBulkImport.py:354 msgid "How often to print a one-line status report (0 (default) means never)" @@ -664,84 +688,88 @@ msgid "" "\n" "Global lock taken ..." msgstr "" +"\n" +"Globaler Lock genommen ..." #: GuiBulkImport.py:68 msgid "Importing..." -msgstr "" +msgstr "Importiere..." #: GuiBulkImport.py:117 msgid "" "GuiBulkImport.load done: Stored: %d \tDuplicates: %d \tPartial: %d \tErrors: " "%d in %s seconds - %.0f/sec" msgstr "" +"GuiBulkImport.load ist fertig: Gespeichert: %d \tDupletten: %d \tTeilweise: " +"%d \tFehler: %d in %s Sekunden - %.0f/sek" #: GuiBulkImport.py:131 msgid "Import Complete" -msgstr "" +msgstr "Import fertig" #: GuiBulkImport.py:139 -msgid "bulk-import aborted - global lock not available" -msgstr "" +msgid "bulk import aborted - global lock not available" +msgstr "Massenimport abgebrochen - globaler Lock nicht verfügbar" #: GuiBulkImport.py:165 msgid "Print Start/Stop Info" -msgstr "" +msgstr "Start-/Stop-Infos ausgeben" #: GuiBulkImport.py:172 msgid "Hands/status print:" -msgstr "" +msgstr "Hände/Statusausgabe:" #: GuiBulkImport.py:189 msgid "Number of threads:" -msgstr "" +msgstr "Anzahl Threads:" #: GuiBulkImport.py:209 msgid "Fail on error" -msgstr "" +msgstr "Bei Fehler abbrechen" #: GuiBulkImport.py:214 msgid "Hands/file:" -msgstr "" +msgstr "Hände/Datei:" #: GuiBulkImport.py:229 msgid "Drop indexes:" -msgstr "" +msgstr "Indexe löschen:" #: GuiBulkImport.py:238 GuiBulkImport.py:288 msgid "auto" -msgstr "" +msgstr "auto" #: GuiBulkImport.py:239 GuiBulkImport.py:289 GuiBulkImport.py:398 msgid "don't drop" -msgstr "" +msgstr "Nein" #: GuiBulkImport.py:240 GuiBulkImport.py:290 msgid "drop" -msgstr "" +msgstr "Ja" #: GuiBulkImport.py:246 msgid "HUD Test mode" -msgstr "" +msgstr "HUD-Testmodus" #: GuiBulkImport.py:251 msgid "Site filter:" -msgstr "" +msgstr "Site-Filter:" #: GuiBulkImport.py:279 msgid "Drop HudCache:" -msgstr "" +msgstr "HudCache löschen:" -#: GuiBulkImport.py:297 fpdb.pyw:831 +#: GuiBulkImport.py:297 fpdb.pyw:814 msgid "_Bulk Import" -msgstr "" +msgstr "_Massenimport" #: GuiBulkImport.py:299 msgid "Import clicked" -msgstr "" +msgstr "Import geklickt" #: GuiBulkImport.py:317 msgid "Waiting..." -msgstr "" +msgstr "Warte..." #: GuiBulkImport.py:346 msgid "Input file in quiet mode" @@ -809,101 +837,164 @@ msgid "" "in %s seconds - %.0f/sec" msgstr "" -#: GuiDatabase.py:106 GuiLogView.py:96 -msgid "Refresh" -msgstr "" - -#: GuiDatabase.py:111 -msgid "Type" -msgstr "" - -#: GuiDatabase.py:112 -msgid "Name" -msgstr "" - -#: GuiDatabase.py:113 -msgid "Description" -msgstr "" - -#: GuiDatabase.py:114 GuiImapFetcher.py:119 -msgid "Username" -msgstr "" - -#: GuiDatabase.py:115 GuiImapFetcher.py:119 -msgid "Password" -msgstr "" - -#: GuiDatabase.py:116 -msgid "Host" -msgstr "" - #: GuiDatabase.py:117 -msgid "Default" -msgstr "" +msgid "_Add" +msgstr "_Hinzufügen" -#: GuiDatabase.py:118 +#: GuiDatabase.py:121 +msgid "_Refresh" +msgstr "_Aktualisieren" + +#: GuiDatabase.py:125 +msgid "Type" +msgstr "Typ" + +#: GuiDatabase.py:126 +msgid "Name" +msgstr "Name" + +#: GuiDatabase.py:127 +msgid "Description" +msgstr "Beschreibung" + +#: GuiDatabase.py:128 GuiDatabase.py:459 GuiImapFetcher.py:119 +msgid "Username" +msgstr "Benutzername" + +#: GuiDatabase.py:129 GuiDatabase.py:466 GuiImapFetcher.py:119 +msgid "Password" +msgstr "Passwort" + +#: GuiDatabase.py:130 +msgid "Host" +msgstr "Host" + +#: GuiDatabase.py:131 +msgid "Open" +msgstr "Geöffnet" + +#: GuiDatabase.py:132 msgid "Status" -msgstr "" +msgstr "Status" -#: GuiDatabase.py:251 +#: GuiDatabase.py:266 msgid "Testing database connections ... " +msgstr "Teste Datenbankverbindungen..." + +#: GuiDatabase.py:293 +msgid "finished." +msgstr "Fertig." + +#: GuiDatabase.py:303 +msgid "loadDbs error: " +msgstr "loadDbs Fehler:" + +#: GuiDatabase.py:324 GuiLogView.py:200 GuiTourneyPlayerStats.py:466 +msgid "***sortCols error: " +msgstr "***sortCols Fehler: " + +#: GuiDatabase.py:326 +msgid "sortCols error: " +msgstr "sortCols Fehler: " + +#: GuiDatabase.py:371 +msgid "testDB: trying to connect to: %s/%s, %s, %s/%s" msgstr "" -#: GuiDatabase.py:281 -msgid "loaddbs: trying to connect to: %s/%s, %s, %s/%s" -msgstr "" - -#: GuiDatabase.py:284 +#: GuiDatabase.py:374 msgid " connected ok" -msgstr "" +msgstr " Verbindung OK" -#: GuiDatabase.py:291 +#: GuiDatabase.py:381 msgid " not connected but no exception" -msgstr "" +msgstr " Nicht verbunden aber keine Exception" -#: GuiDatabase.py:293 fpdb.pyw:904 +#: GuiDatabase.py:383 fpdb.pyw:886 msgid "" "MySQL Server reports: Access denied. Are your permissions set correctly?" msgstr "" +"MySQL Server meldet: Zugriff verweigert. Sind Ihre Zugriffsrechte korrekt " +"gesetzt?" -#: GuiDatabase.py:297 +#: GuiDatabase.py:387 fpdb.pyw:888 +msgid "MySQL client reports: 2002 or 2003 error. Unable to connect - " +msgstr "" +"MySQL Client meldet Fehler Nr. 2002 oder 2003. Konnte nicht verbinden - " + +#: GuiDatabase.py:388 fpdb.pyw:889 +msgid "Please check that the MySQL service has been started" +msgstr "Bitte überprüfen Sie, dass der MySQL-Dienst gestartet ist" + +#: GuiDatabase.py:392 fpdb.pyw:891 msgid "" -"MySQL client reports: 2002 or 2003 error. Unable to connect - Please check " -"that the MySQL service has been started" +"PostgreSQL Server reports: Access denied. Are your permissions set correctly?" msgstr "" -#: GuiDatabase.py:301 fpdb.pyw:909 -msgid "" -"Postgres Server reports: Access denied. Are your permissions set correctly?" +#: GuiDatabase.py:395 fpdb.pyw:893 +msgid "PostgreSQL client reports: Unable to connect - " +msgstr "PostgreSQL Client meldet Fehler: Konnte nicht verbinden - " + +#: GuiDatabase.py:396 fpdb.pyw:894 +msgid "Please check that the PostgreSQL service has been started" +msgstr "Bitte überprüfen Sie, dass der PostgreSQL-Dienst gestartet ist" + +#: GuiDatabase.py:406 +msgid "db connection to " msgstr "" -#: GuiDatabase.py:304 -msgid "" -"Postgres client reports: Unable to connect - Please check that the Postgres " -"service has been started" +#: GuiDatabase.py:434 +msgid "DB Type" msgstr "" -#: GuiDatabase.py:321 -msgid "finished." +#: GuiDatabase.py:444 +msgid "DB Name" msgstr "" -#: GuiDatabase.py:331 -msgid "loaddbs error: " +#: GuiDatabase.py:452 +msgid "DB Description" msgstr "" -#: GuiDatabase.py:352 GuiLogView.py:200 GuiTourneyPlayerStats.py:466 -msgid "***sortCols error: " +#: GuiDatabase.py:473 +msgid "Host Computer" msgstr "" -#: GuiDatabase.py:354 -msgid "sortCols error: " -msgstr "" +#: GuiDatabase.py:528 +msgid "Database created" +msgstr "Datenbank erstellt" -#: GuiDatabase.py:424 GuiLogView.py:213 +#: GuiDatabase.py:531 +msgid "Database creation failed" +msgstr "Datenbankerstellung fehlgeschlagen" + +#: GuiDatabase.py:550 +msgid "No Database Name given" +msgstr "Kein Datenbankname eingegeben" + +#: GuiDatabase.py:553 +msgid "No Database Description given" +msgstr "Keine Datenbankbeschreibung eingegeben" + +#: GuiDatabase.py:556 +msgid "No Username given" +msgstr "Kein Benutzername eingegeben" + +#: GuiDatabase.py:559 +msgid "No Password given" +msgstr "Kein Passwort eingegeben" + +#: GuiDatabase.py:562 +msgid "No Host given" +msgstr "Kein Host eingegeben" + +#: GuiDatabase.py:589 +msgid "Do you want to try again?" +msgstr "Wollen Sie es nochmal versuchen?" + +#: GuiDatabase.py:702 GuiLogView.py:213 msgid "Test Log Viewer" msgstr "" -#: GuiDatabase.py:429 GuiLogView.py:218 +#: GuiDatabase.py:707 GuiLogView.py:218 msgid "Log Viewer" msgstr "" @@ -1047,13 +1138,17 @@ msgstr "" msgid "Log Messages" msgstr "" +#: GuiLogView.py:96 +msgid "Refresh" +msgstr "" + #: GuiPositionalStats.py:146 msgid "DEBUG: activesite set to %s" msgstr "" #: GuiPositionalStats.py:332 msgid "Positional Stats page displayed in %4.2f seconds" -msgstr "" +msgstr "Statistiken nach Position wurde in %4.2f Sekunden angezeigt" #: GuiPrefs.py:81 msgid "Setting" @@ -1174,7 +1269,7 @@ msgstr "" msgid "Note: error output is being diverted to:\n" msgstr "" -#: HUD_main.pyw:96 fpdb.pyw:1138 +#: HUD_main.pyw:96 fpdb.pyw:1120 msgid "" "\n" "Any major error will be reported there _only_.\n" @@ -1242,358 +1337,358 @@ msgstr "" msgid "Using db name = %s\n" msgstr "" -#: Hand.py:150 +#: Hand.py:151 msgid "BB" msgstr "" -#: Hand.py:151 +#: Hand.py:152 msgid "SB" msgstr "" -#: Hand.py:152 +#: Hand.py:153 msgid "BUTTONPOS" msgstr "" -#: Hand.py:153 +#: Hand.py:154 msgid "HAND NO." msgstr "" -#: Hand.py:154 TourneySummary.py:134 +#: Hand.py:155 TourneySummary.py:134 msgid "SITE" msgstr "" -#: Hand.py:155 +#: Hand.py:156 msgid "TABLE NAME" msgstr "" -#: Hand.py:156 TourneySummary.py:144 +#: Hand.py:157 TourneySummary.py:144 msgid "HERO" msgstr "" -#: Hand.py:157 TourneySummary.py:145 +#: Hand.py:158 TourneySummary.py:145 msgid "MAXSEATS" msgstr "" -#: Hand.py:158 +#: Hand.py:159 msgid "LEVEL" msgstr "" -#: Hand.py:159 TourneySummary.py:150 +#: Hand.py:160 TourneySummary.py:150 msgid "MIXED" msgstr "" -#: Hand.py:160 +#: Hand.py:161 msgid "LASTBET" msgstr "" -#: Hand.py:161 +#: Hand.py:162 msgid "ACTION STREETS" msgstr "" -#: Hand.py:162 +#: Hand.py:163 msgid "STREETS" msgstr "" -#: Hand.py:163 +#: Hand.py:164 msgid "ALL STREETS" msgstr "" -#: Hand.py:164 +#: Hand.py:165 msgid "COMMUNITY STREETS" msgstr "" -#: Hand.py:165 +#: Hand.py:166 msgid "HOLE STREETS" msgstr "" -#: Hand.py:166 +#: Hand.py:167 msgid "COUNTED SEATS" msgstr "" -#: Hand.py:167 +#: Hand.py:168 msgid "DEALT" msgstr "" -#: Hand.py:168 +#: Hand.py:169 msgid "SHOWN" msgstr "" -#: Hand.py:169 +#: Hand.py:170 msgid "MUCKED" msgstr "" -#: Hand.py:170 +#: Hand.py:171 msgid "TOTAL POT" msgstr "" -#: Hand.py:171 +#: Hand.py:172 msgid "TOTAL COLLECTED" msgstr "" -#: Hand.py:172 +#: Hand.py:173 msgid "RAKE" msgstr "" -#: Hand.py:173 TourneySummary.py:135 +#: Hand.py:174 TourneySummary.py:135 msgid "START TIME" msgstr "" -#: Hand.py:174 +#: Hand.py:175 msgid "TOURNAMENT NO" msgstr "" -#: Hand.py:175 TourneySummary.py:140 +#: Hand.py:176 TourneySummary.py:140 msgid "TOURNEY ID" msgstr "" -#: Hand.py:176 TourneySummary.py:139 +#: Hand.py:177 TourneySummary.py:139 msgid "TOURNEY TYPE ID" msgstr "" -#: Hand.py:177 TourneySummary.py:141 +#: Hand.py:178 TourneySummary.py:141 msgid "BUYIN" msgstr "" -#: Hand.py:178 +#: Hand.py:179 msgid "BUYIN CURRENCY" msgstr "" -#: Hand.py:179 +#: Hand.py:180 msgid "BUYIN CHIPS" msgstr "" -#: Hand.py:180 TourneySummary.py:142 +#: Hand.py:181 TourneySummary.py:142 msgid "FEE" msgstr "" -#: Hand.py:181 +#: Hand.py:182 msgid "IS REBUY" msgstr "" -#: Hand.py:182 +#: Hand.py:183 msgid "IS ADDON" msgstr "" -#: Hand.py:183 +#: Hand.py:184 msgid "IS KO" msgstr "" -#: Hand.py:184 TourneySummary.py:166 +#: Hand.py:185 TourneySummary.py:166 msgid "KO BOUNTY" msgstr "" -#: Hand.py:185 +#: Hand.py:186 msgid "IS MATRIX" msgstr "" -#: Hand.py:186 +#: Hand.py:187 msgid "IS SHOOTOUT" msgstr "" -#: Hand.py:187 TourneySummary.py:167 +#: Hand.py:188 TourneySummary.py:167 msgid "TOURNEY COMMENT" msgstr "" -#: Hand.py:190 TourneySummary.py:179 +#: Hand.py:191 TourneySummary.py:179 msgid "PLAYERS" msgstr "" -#: Hand.py:191 +#: Hand.py:192 msgid "STACKS" msgstr "" -#: Hand.py:192 +#: Hand.py:193 msgid "POSTED" msgstr "" -#: Hand.py:193 +#: Hand.py:194 msgid "POT" msgstr "" -#: Hand.py:194 +#: Hand.py:195 msgid "SEATING" msgstr "" -#: Hand.py:195 +#: Hand.py:196 msgid "GAMETYPE" msgstr "" -#: Hand.py:196 +#: Hand.py:197 msgid "ACTION" msgstr "" -#: Hand.py:197 +#: Hand.py:198 msgid "COLLECTEES" msgstr "" -#: Hand.py:198 +#: Hand.py:199 msgid "BETS" msgstr "" -#: Hand.py:199 +#: Hand.py:200 msgid "BOARD" msgstr "" -#: Hand.py:200 +#: Hand.py:201 msgid "DISCARDS" msgstr "" -#: Hand.py:201 +#: Hand.py:202 msgid "HOLECARDS" msgstr "" -#: Hand.py:202 +#: Hand.py:203 msgid "TOURNEYS PLAYER IDS" msgstr "" -#: Hand.py:225 Hand.py:1242 +#: Hand.py:226 Hand.py:1243 msgid "[ERROR] Tried to add holecards for unknown player: %s" msgstr "" -#: Hand.py:278 +#: Hand.py:279 msgid "Hand.insert(): hid #: %s is a duplicate" msgstr "" -#: Hand.py:317 -msgid "markstreets didn't match - Assuming hand cancelled" +#: Hand.py:318 +msgid "markstreets didn't match - Assuming hand %s was cancelled" msgstr "" -#: Hand.py:319 +#: Hand.py:320 msgid "FpdbParseError: markStreets appeared to fail: First 100 chars: '%s'" msgstr "" -#: Hand.py:323 +#: Hand.py:324 msgid "DEBUG: checkPlayerExists %s fail on hand number %s" msgstr "" -#: Hand.py:324 +#: Hand.py:325 msgid "checkPlayerExists: '%s fail on hand number %s" msgstr "" -#: Hand.py:405 +#: Hand.py:406 msgid "%s %s calls %s" msgstr "" -#: Hand.py:475 +#: Hand.py:476 msgid "%s %s raise %s" msgstr "" -#: Hand.py:486 +#: Hand.py:487 msgid "%s %s bets %s" msgstr "" -#: Hand.py:505 +#: Hand.py:506 msgid "%s %s folds" msgstr "" -#: Hand.py:514 +#: Hand.py:515 msgid "%s %s checks" msgstr "" -#: Hand.py:534 +#: Hand.py:535 msgid "addShownCards %s hole=%s all=%s" msgstr "" -#: Hand.py:645 +#: Hand.py:646 msgid "" "*** ERROR - HAND: calling writeGameLine with unexpected STARTTIME value, " "expecting datetime.date object, received:" msgstr "" -#: Hand.py:646 +#: Hand.py:647 msgid "" "*** Make sure your HandHistoryConverter is setting hand.startTime properly!" msgstr "" -#: Hand.py:647 +#: Hand.py:648 msgid "*** Game String:" msgstr "" -#: Hand.py:701 +#: Hand.py:702 msgid "" "*** Parse error reading blinds (check compilePlayerRegexs as a likely " "culprit)" msgstr "" -#: Hand.py:728 +#: Hand.py:729 msgid "HoldemOmahaHand.__init__:Can't assemble hand from db without a handid" msgstr "" -#: Hand.py:730 +#: Hand.py:731 msgid "HoldemOmahaHand.__init__:Neither HHC nor DB+handid provided" msgstr "" -#: Hand.py:1111 +#: Hand.py:1112 msgid "*** DEALING HANDS ***" msgstr "" -#: Hand.py:1116 +#: Hand.py:1117 msgid "Dealt to %s: [%s]" msgstr "" -#: Hand.py:1121 +#: Hand.py:1122 msgid "*** FIRST DRAW ***" msgstr "" -#: Hand.py:1131 +#: Hand.py:1132 msgid "*** SECOND DRAW ***" msgstr "" -#: Hand.py:1141 +#: Hand.py:1142 msgid "*** THIRD DRAW ***" msgstr "" -#: Hand.py:1151 Hand.py:1369 +#: Hand.py:1152 Hand.py:1370 msgid "*** SHOW DOWN ***" msgstr "" -#: Hand.py:1166 Hand.py:1384 +#: Hand.py:1167 Hand.py:1385 msgid "*** SUMMARY ***" msgstr "" -#: Hand.py:1251 +#: Hand.py:1252 msgid "%s %s completes %s" msgstr "" -#: Hand.py:1269 +#: Hand.py:1270 msgid "Bringin: %s, %s" msgstr "" -#: Hand.py:1309 +#: Hand.py:1310 msgid "*** 3RD STREET ***" msgstr "" -#: Hand.py:1323 +#: Hand.py:1324 msgid "*** 4TH STREET ***" msgstr "" -#: Hand.py:1335 +#: Hand.py:1336 msgid "*** 5TH STREET ***" msgstr "" -#: Hand.py:1347 +#: Hand.py:1348 msgid "*** 6TH STREET ***" msgstr "" -#: Hand.py:1357 +#: Hand.py:1358 msgid "*** RIVER ***" msgstr "" -#: Hand.py:1449 +#: Hand.py:1450 msgid "" "join_holecards: # of holecards should be either < 4, 4 or 7 - 5 and 6 should " "be impossible for anyone who is not a hero" msgstr "" -#: Hand.py:1450 +#: Hand.py:1451 msgid "join_holcards: holecards(%s): %s" msgstr "" -#: Hand.py:1533 +#: Hand.py:1534 msgid "DEBUG: call Pot.end() before printing pot total" msgstr "" -#: Hand.py:1535 +#: Hand.py:1536 msgid "FpdbError in printing Hand object" msgstr "" @@ -1716,139 +1811,129 @@ msgid "" " on %s." msgstr "" -#: Hud.py:149 +#: Hud.py:148 msgid "Kill This HUD" msgstr "" -#: Hud.py:154 +#: Hud.py:153 msgid "Save HUD Layout" msgstr "" -#: Hud.py:158 +#: Hud.py:157 msgid "Reposition StatWindows" msgstr "" -#: Hud.py:162 +#: Hud.py:161 msgid "Show Player Stats" msgstr "" -#: Hud.py:167 Hud.py:236 +#: Hud.py:166 Hud.py:235 msgid "For This Blind Level Only" msgstr "" -#: Hud.py:172 Hud.py:241 +#: Hud.py:171 Hud.py:240 msgid "For Multiple Blind Levels:" msgstr "" -#: Hud.py:175 Hud.py:244 +#: Hud.py:174 Hud.py:243 msgid " 0.5 to 2.0 x Current Blinds" msgstr "" -#: Hud.py:180 Hud.py:249 +#: Hud.py:179 Hud.py:248 msgid " 0.33 to 3.0 x Current Blinds" msgstr "" -#: Hud.py:185 Hud.py:254 +#: Hud.py:184 Hud.py:253 msgid " 0.1 to 10 x Current Blinds" msgstr "" -#: Hud.py:190 Hud.py:259 +#: Hud.py:189 Hud.py:258 msgid " All Levels" msgstr "" -#: Hud.py:195 Hud.py:264 +#: Hud.py:194 Hud.py:263 msgid "For #Seats:" msgstr "" -#: Hud.py:198 Hud.py:267 +#: Hud.py:197 Hud.py:266 msgid " Any Number" msgstr "" -#: Hud.py:203 Hud.py:272 +#: Hud.py:202 Hud.py:271 msgid " Custom" msgstr "" -#: Hud.py:208 Hud.py:277 +#: Hud.py:207 Hud.py:276 msgid " Exact" msgstr "" -#: Hud.py:213 Hud.py:282 +#: Hud.py:212 Hud.py:281 msgid "Since:" msgstr "" -#: Hud.py:216 Hud.py:285 +#: Hud.py:215 Hud.py:284 msgid " All Time" msgstr "" -#: Hud.py:221 Hud.py:290 +#: Hud.py:220 Hud.py:289 msgid " Session" msgstr "" -#: Hud.py:226 Hud.py:295 +#: Hud.py:225 Hud.py:294 msgid " %s Days" msgstr "" -#: Hud.py:231 +#: Hud.py:230 msgid "Show Opponent Stats" msgstr "" -#: Hud.py:353 +#: Hud.py:352 msgid "Debug StatWindows" msgstr "" -#: Hud.py:357 +#: Hud.py:356 msgid "Set max seats" msgstr "" -#: Hud.py:543 +#: Hud.py:542 msgid "Updating config file" msgstr "" -#: Hud.py:552 +#: Hud.py:551 msgid "No layout found for %d-max games for site %s\n" msgstr "" -#: Hud.py:566 +#: Hud.py:565 msgid "" "exception in Hud.adj_seats\n" "\n" msgstr "" -#: Hud.py:567 +#: Hud.py:566 msgid "error is %s" msgstr "" -#: Hud.py:574 +#: Hud.py:573 msgid "Error finding actual seat.\n" msgstr "" -#: Hud.py:590 +#: Hud.py:589 msgid "" "------------------------------------------------------------\n" "Creating hud from hand %s\n" msgstr "" -#: Hud.py:639 +#: Hud.py:638 msgid "" "KeyError at the start of the for loop in update in hud_main. How this can " "possibly happen is totally beyond my comprehension. Your HUD may be about to " "get really weird. -Eric" msgstr "" -#: Hud.py:640 +#: Hud.py:639 msgid "(btw, the key was %s and statd is %s" msgstr "" -#: Hud.py:947 -msgid "" -"Fake main window, blah blah, blah\n" -"blah, blah" -msgstr "" - -#: Hud.py:955 -msgid "Table not found." -msgstr "" - #: ImapFetcher.py:54 msgid "response to logging in:" msgstr "" @@ -1861,36 +1946,36 @@ msgstr "" msgid "No Name" msgstr "" -#: OnGameToFpdb.py:153 PkrToFpdb.py:144 PokerStarsToFpdb.py:189 +#: OnGameToFpdb.py:178 PkrToFpdb.py:144 PokerStarsToFpdb.py:189 msgid "determineGameType: Unable to recognise gametype from: '%s'" msgstr "" -#: OnGameToFpdb.py:154 PkrToFpdb.py:145 PkrToFpdb.py:173 +#: OnGameToFpdb.py:179 OnGameToFpdb.py:193 PkrToFpdb.py:145 PkrToFpdb.py:173 #: PokerStarsToFpdb.py:190 PokerStarsToFpdb.py:220 msgid "determineGameType: Raising FpdbParseError" msgstr "" -#: OnGameToFpdb.py:155 PkrToFpdb.py:146 PokerStarsToFpdb.py:191 +#: OnGameToFpdb.py:180 PkrToFpdb.py:146 PokerStarsToFpdb.py:191 msgid "Unable to recognise gametype from: '%s'" msgstr "" -#: OnGameToFpdb.py:235 PartyPokerToFpdb.py:351 PokerStarsToFpdb.py:320 +#: OnGameToFpdb.py:192 +msgid "determineGameType: limit not found in self.limits(%s). hand: '%s'" +msgstr "" + +#: OnGameToFpdb.py:194 +msgid "limit not found in self.limits(%s). hand: '%s'" +msgstr "" + +#: OnGameToFpdb.py:268 PartyPokerToFpdb.py:351 PokerStarsToFpdb.py:321 msgid "readButton: not found" msgstr "" -#: OnGameToFpdb.py:250 -msgid "readBlinds starting" +#: OnGameToFpdb.py:288 +msgid "readBlinds in noSB exception - no SB created" msgstr "" -#: OnGameToFpdb.py:254 -msgid "re_postSB failed, hand=" -msgstr "" - -#: OnGameToFpdb.py:257 -msgid "readBlinds in noSB exception" -msgstr "" - -#: OnGameToFpdb.py:265 PokerStarsToFpdb.py:358 +#: OnGameToFpdb.py:296 PokerStarsToFpdb.py:359 msgid "reading antes" msgstr "" @@ -1975,187 +2060,167 @@ msgstr "" msgid "in not result starttime" msgstr "" -#: PokerStarsToFpdb.py:273 +#: PokerStarsToFpdb.py:274 msgid "failed to detect currency" msgstr "" -#: Stats.py:103 -msgid "exception getting stat %s for player %s %s" -msgstr "" - -#: Stats.py:104 -msgid "Stats.do_stat result = %s" -msgstr "" - -#: Stats.py:113 -msgid "error: %s" -msgstr "" - -#: Stats.py:132 Stats.py:133 +#: Stats.py:122 Stats.py:123 msgid "Total Profit" msgstr "" -#: Stats.py:154 Stats.py:161 +#: Stats.py:144 Stats.py:151 msgid "Voluntarily Put In Pot Pre-Flop%" msgstr "" -#: Stats.py:174 Stats.py:182 +#: Stats.py:164 Stats.py:172 msgid "Pre-Flop Raise %" msgstr "" -#: Stats.py:195 Stats.py:203 +#: Stats.py:185 Stats.py:193 msgid "% went to showdown" msgstr "" -#: Stats.py:216 Stats.py:224 +#: Stats.py:206 Stats.py:214 msgid "% won money at showdown" msgstr "" -#: Stats.py:237 Stats.py:246 +#: Stats.py:227 Stats.py:236 msgid "profit/100hands" msgstr "" -#: Stats.py:240 +#: Stats.py:230 msgid "exception calcing p/100: 100 * %d / %d" msgstr "" -#: Stats.py:259 Stats.py:268 +#: Stats.py:249 Stats.py:258 msgid "big blinds/100 hands" msgstr "" -#: Stats.py:281 Stats.py:290 +#: Stats.py:271 Stats.py:280 msgid "Big Bets/100 hands" msgstr "" -#: Stats.py:284 +#: Stats.py:274 msgid "exception calcing BB/100: " msgstr "" -#: Stats.py:304 Stats.py:315 +#: Stats.py:294 Stats.py:303 msgid "Flop Seen %" msgstr "" -#: Stats.py:338 Stats.py:346 +#: Stats.py:326 Stats.py:335 msgid "number hands seen" msgstr "" -#: Stats.py:359 Stats.py:367 +#: Stats.py:348 Stats.py:356 msgid "folded flop/4th" msgstr "" -#: Stats.py:380 +#: Stats.py:369 msgid "% steal attempted" msgstr "" -#: Stats.py:395 Stats.py:402 +#: Stats.py:384 Stats.py:391 msgid "% folded SB to steal" msgstr "" -#: Stats.py:414 Stats.py:421 +#: Stats.py:403 Stats.py:410 msgid "% folded BB to steal" msgstr "" -#: Stats.py:436 Stats.py:443 +#: Stats.py:425 Stats.py:432 msgid "% folded blind to steal" msgstr "" -#: Stats.py:455 Stats.py:462 +#: Stats.py:444 Stats.py:451 msgid "% 3/4 Bet preflop/3rd" msgstr "" -#: Stats.py:474 Stats.py:481 +#: Stats.py:463 Stats.py:470 msgid "% won$/saw flop/4th" msgstr "" -#: Stats.py:493 Stats.py:500 +#: Stats.py:482 Stats.py:489 msgid "Aggression Freq flop/4th" msgstr "" -#: Stats.py:512 Stats.py:519 +#: Stats.py:501 Stats.py:508 msgid "Aggression Freq turn/5th" msgstr "" -#: Stats.py:531 Stats.py:538 +#: Stats.py:520 Stats.py:527 msgid "Aggression Freq river/6th" msgstr "" -#: Stats.py:550 Stats.py:557 +#: Stats.py:539 Stats.py:546 msgid "Aggression Freq 7th" msgstr "" -#: Stats.py:576 Stats.py:583 +#: Stats.py:565 Stats.py:572 msgid "Post-Flop Aggression Freq" msgstr "" -#: Stats.py:604 Stats.py:611 +#: Stats.py:593 Stats.py:600 msgid "Aggression Freq" msgstr "" -#: Stats.py:630 Stats.py:637 +#: Stats.py:619 Stats.py:626 msgid "Aggression Factor" msgstr "" -#: Stats.py:654 Stats.py:661 +#: Stats.py:643 Stats.py:650 msgid "% continuation bet " msgstr "" -#: Stats.py:673 Stats.py:680 +#: Stats.py:662 Stats.py:669 msgid "% continuation bet flop/4th" msgstr "" -#: Stats.py:692 Stats.py:699 +#: Stats.py:681 Stats.py:688 msgid "% continuation bet turn/5th" msgstr "" -#: Stats.py:711 Stats.py:718 +#: Stats.py:700 Stats.py:707 msgid "% continuation bet river/6th" msgstr "" -#: Stats.py:730 Stats.py:737 +#: Stats.py:719 Stats.py:726 msgid "% continuation bet 7th" msgstr "" -#: Stats.py:749 Stats.py:756 +#: Stats.py:738 Stats.py:745 msgid "% fold frequency flop/4th" msgstr "" -#: Stats.py:768 Stats.py:775 +#: Stats.py:757 Stats.py:764 msgid "% fold frequency turn/5th" msgstr "" -#: Stats.py:787 Stats.py:794 +#: Stats.py:776 Stats.py:783 msgid "% fold frequency river/6th" msgstr "" -#: Stats.py:806 Stats.py:813 +#: Stats.py:795 Stats.py:802 msgid "% fold frequency 7th" msgstr "" -#: Stats.py:833 +#: Stats.py:822 msgid "Example stats, player = %s hand = %s:" msgstr "" -#: Stats.py:866 +#: Stats.py:855 msgid "" "\n" "\n" "Legal stats:" msgstr "" -#: Stats.py:867 +#: Stats.py:856 msgid "" "(add _0 to name to display with 0 decimal places, _1 to display with 1, " "etc)\n" msgstr "" -#: Tables.py:234 -msgid "Found unknown table = %s" -msgstr "" - -#: Tables.py:261 -msgid "attach to window" -msgstr "" - #: Tables_Demo.py:72 msgid "Fake HUD Main Window" msgstr "" @@ -2581,238 +2646,228 @@ msgid "Confirm deleting and recreating tables" msgstr "Tabellen löschen und reinitialisieren" #: fpdb.pyw:547 -msgid "" -"Please confirm that you want to (re-)create the tables. If there already are " -"tables in the database " -msgstr "" +msgid "Please confirm that you want to (re-)create the tables." +msgstr "Bitte bestätigen Sie, dass Sie die Tabellen neu erstellen möchten." #: fpdb.pyw:548 msgid "" -" they will be deleted and you will have to re-import your histories.\n" -"This may take a while." +" If there already are tables in the database %s on %s they will be deleted " +"and you will have to re-import your histories.\n" msgstr "" +" Falls bereits Tabellen in der Datenbank %s auf %s existieren werden Sie " +"gelöscht werden und Sie werden Ihre Histories neu importieren müssen.\n" -#: fpdb.pyw:573 +#: fpdb.pyw:549 +msgid "This may take a while." +msgstr "Dies kann eine Weile dauern." + +#: fpdb.pyw:574 msgid "User cancelled recreating tables" msgstr "Benutzer hat Reinitialisierung der Tabellen abgebrochen" -#: fpdb.pyw:580 +#: fpdb.pyw:581 msgid "Please confirm that you want to re-create the HUD cache." msgstr "Bitte bestätigen Sie, dass Sie den HUD-Cache neu erstellen möchten." -#: fpdb.pyw:588 +#: fpdb.pyw:589 msgid " Hero's cache starts: " msgstr "" -#: fpdb.pyw:602 +#: fpdb.pyw:603 msgid " Villains' cache starts: " msgstr "" -#: fpdb.pyw:615 +#: fpdb.pyw:616 msgid " Rebuilding HUD Cache ... " msgstr " Der HUD-Cache wird neu erstellt ... " -#: fpdb.pyw:623 +#: fpdb.pyw:624 msgid "User cancelled rebuilding hud cache" msgstr "Benutzer hat Neuerstellung des HUD-Cache abgebrochen" -#: fpdb.pyw:635 +#: fpdb.pyw:636 msgid "Confirm rebuilding database indexes" msgstr "Bestätigung der Neuerstellung der Datenbankindexe" -#: fpdb.pyw:636 +#: fpdb.pyw:637 msgid "Please confirm that you want to rebuild the database indexes." msgstr "" "Bitte bestätigen Sie, dass Sie die Datenbankindexe neu erstellen möchten." -#: fpdb.pyw:644 +#: fpdb.pyw:645 msgid " Rebuilding Indexes ... " msgstr " Datenbankindexe werden neu erstellt ... " -#: fpdb.pyw:651 +#: fpdb.pyw:652 msgid " Cleaning Database ... " msgstr " Reinige Datenbank ... " -#: fpdb.pyw:656 +#: fpdb.pyw:657 msgid " Analyzing Database ... " msgstr " Analysiere Datenbank ... " -#: fpdb.pyw:661 +#: fpdb.pyw:662 msgid "User cancelled rebuilding db indexes" msgstr "Benutzer hat Neuerstellung der Datenbankindexe abgebrochen" -#: fpdb.pyw:756 +#: fpdb.pyw:757 msgid "" "Unimplemented: Save Profile (try saving a HUD layout, that should do it)" msgstr "" -#: fpdb.pyw:759 -msgid "Fatal Error - Config File Missing" -msgstr "Schwerer Fehler - Konfigurationsdatei nicht gefunden" - -#: fpdb.pyw:761 -msgid "Please copy the config file from the docs folder to:" -msgstr "" - -#: fpdb.pyw:769 -msgid "" -"and edit it according to the install documentation at http://fpdb." -"sourceforge.net" -msgstr "" - -#: fpdb.pyw:825 +#: fpdb.pyw:808 msgid "_Main" msgstr "_Hauptmenü" -#: fpdb.pyw:826 fpdb.pyw:853 +#: fpdb.pyw:809 fpdb.pyw:836 msgid "_Quit" msgstr "_Beenden" -#: fpdb.pyw:827 +#: fpdb.pyw:810 msgid "L" msgstr "L" -#: fpdb.pyw:827 +#: fpdb.pyw:810 msgid "_Load Profile (broken)" msgstr "Profil _Laden (kaputt)" -#: fpdb.pyw:828 +#: fpdb.pyw:811 msgid "S" msgstr "S" -#: fpdb.pyw:828 +#: fpdb.pyw:811 msgid "_Save Profile (todo)" msgstr "Profil _Speichern (nicht fertig)" -#: fpdb.pyw:829 +#: fpdb.pyw:812 msgid "F" msgstr "F" -#: fpdb.pyw:829 +#: fpdb.pyw:812 msgid "Pre_ferences" msgstr "_Einstellungen" -#: fpdb.pyw:830 +#: fpdb.pyw:813 msgid "_Import" msgstr "_Importieren" -#: fpdb.pyw:831 +#: fpdb.pyw:814 msgid "B" msgstr "B" -#: fpdb.pyw:832 +#: fpdb.pyw:815 msgid "I" msgstr "I" -#: fpdb.pyw:832 +#: fpdb.pyw:815 msgid "_Import through eMail/IMAP" msgstr "_Import per eMail/IMAP" -#: fpdb.pyw:833 +#: fpdb.pyw:816 msgid "_Viewers" msgstr "" -#: fpdb.pyw:834 +#: fpdb.pyw:817 msgid "A" msgstr "A" -#: fpdb.pyw:834 +#: fpdb.pyw:817 msgid "_Auto Import and HUD" msgstr "_Autoimport und HUD" -#: fpdb.pyw:835 +#: fpdb.pyw:818 msgid "H" msgstr "H" -#: fpdb.pyw:835 +#: fpdb.pyw:818 msgid "_HUD Configurator" msgstr "_HUD-Konfigurator" -#: fpdb.pyw:836 +#: fpdb.pyw:819 msgid "G" msgstr "G" -#: fpdb.pyw:836 +#: fpdb.pyw:819 msgid "_Graphs" msgstr "_Graphen" -#: fpdb.pyw:837 +#: fpdb.pyw:820 msgid "P" msgstr "P" -#: fpdb.pyw:837 +#: fpdb.pyw:820 msgid "Ring _Player Stats (tabulated view, not on pgsql)" msgstr "" -#: fpdb.pyw:838 +#: fpdb.pyw:821 msgid "T" msgstr "T" -#: fpdb.pyw:838 +#: fpdb.pyw:821 msgid "_Tourney Player Stats (tabulated view, not on pgsql)" msgstr "" -#: fpdb.pyw:839 +#: fpdb.pyw:822 msgid "Tourney _Viewer" msgstr "Tourney-_Betrachter" -#: fpdb.pyw:840 +#: fpdb.pyw:823 msgid "O" msgstr "O" -#: fpdb.pyw:840 +#: fpdb.pyw:823 msgid "P_ositional Stats (tabulated view, not on sqlite)" msgstr "Statistiken nach Position (Tabelle, nicht auf sqlite)" -#: fpdb.pyw:841 fpdb.pyw:1057 +#: fpdb.pyw:824 fpdb.pyw:1039 msgid "Session Stats" msgstr "Statistiken nach Sitzung" -#: fpdb.pyw:842 +#: fpdb.pyw:825 msgid "_Database" msgstr "_Datenbank" -#: fpdb.pyw:843 +#: fpdb.pyw:826 msgid "_Maintain Databases" msgstr "Datenbanken _Verwalten" -#: fpdb.pyw:844 +#: fpdb.pyw:827 msgid "Create or Recreate _Tables" msgstr "_Tabellen erstellen oder neu erstellen" -#: fpdb.pyw:845 +#: fpdb.pyw:828 msgid "Rebuild HUD Cache" msgstr "HUD-Cache neu erstellen" -#: fpdb.pyw:846 +#: fpdb.pyw:829 msgid "Rebuild DB Indexes" msgstr "Datenbankindexe neu erstellen" -#: fpdb.pyw:847 +#: fpdb.pyw:830 msgid "_Statistics" msgstr "_Statistiken" -#: fpdb.pyw:848 +#: fpdb.pyw:831 msgid "Dump Database to Textfile (takes ALOT of time)" msgstr "Datenbank in eine Textdatei schreiben (dauert SEHR lange)" -#: fpdb.pyw:849 +#: fpdb.pyw:832 msgid "_Help" msgstr "_Hilfe" -#: fpdb.pyw:850 +#: fpdb.pyw:833 msgid "_Log Messages" msgstr "_Log-Dateien" -#: fpdb.pyw:851 +#: fpdb.pyw:834 msgid "A_bout, License, Copying" msgstr "_Über, Lizenz, Kopieren" -#: fpdb.pyw:869 +#: fpdb.pyw:852 msgid "There is an error in your config file\n" msgstr "Fehler in Ihrer Konfigurationsdatei\n" -#: fpdb.pyw:870 +#: fpdb.pyw:853 msgid "" "\n" "\n" @@ -2822,126 +2877,120 @@ msgstr "" "\n" "Der Fehler ist:" -#: fpdb.pyw:871 +#: fpdb.pyw:854 msgid "CONFIG FILE ERROR" -msgstr "" +msgstr "FEHLER IN DER KONFIGURATIONSDATEI" -#: fpdb.pyw:875 +#: fpdb.pyw:858 msgid "Logfile is %s\n" -msgstr "" +msgstr "Die Logdatei ist %s\n" -#: fpdb.pyw:877 +#: fpdb.pyw:860 msgid "Config file" msgstr "" -#: fpdb.pyw:878 +#: fpdb.pyw:861 msgid "" "has been created at:\n" "%s.\n" msgstr "" -#: fpdb.pyw:879 -msgid "Edit your screen_name and hand history path in the supported_sites " -msgstr "" - -#: fpdb.pyw:880 +#: fpdb.pyw:862 +#, fuzzy msgid "" -"section of the Preferences window (Main menu) before trying to import hands." +"Edit your screen_name and hand history path in the supported_sites section " +"of the Preferences window (Main menu) before trying to import hands." msgstr "" +"Tragen Sie Ihren Benutzernamen (screen_name) und den Pfad zu den Hand " +"History Dateien in supported_sites ein " -#: fpdb.pyw:902 +#: fpdb.pyw:884 msgid "Connected to SQLite: %s" -msgstr "" +msgstr "Mit SQLite verbunden: %s" -#: fpdb.pyw:906 -msgid "MySQL client reports: 2002 or 2003 error. Unable to connect - " -msgstr "" - -#: fpdb.pyw:907 -msgid "Please check that the MySQL service has been started" -msgstr "" - -#: fpdb.pyw:911 -msgid "Postgres client reports: Unable to connect - " -msgstr "" - -#: fpdb.pyw:912 -msgid "Please check that the Postgres service has been started" -msgstr "" - -#: fpdb.pyw:936 +#: fpdb.pyw:918 msgid "Strong Warning - Invalid database version" -msgstr "" +msgstr "Achtung - Falsche Datenbankversion" -#: fpdb.pyw:938 +#: fpdb.pyw:920 msgid "An invalid DB version or missing tables have been detected." msgstr "" +"Falsche Version der Datenbankstrukturen oder fehlende Tabellen gefunden." -#: fpdb.pyw:942 +#: fpdb.pyw:924 msgid "" "This error is not necessarily fatal but it is strongly recommended that you " "recreate the tables by using the Database menu." msgstr "" +"Dieser Fehler führt nicht zwangsläufig zu einem Absturz aber es wird " +"dringendst empfohlen, dass Sie die Tabellen über das Datenbank-Menü neu " +"erstellen." -#: fpdb.pyw:946 +#: fpdb.pyw:928 msgid "" "Not doing this will likely lead to misbehaviour including fpdb crashes, " "corrupt data etc." msgstr "" +"Falls Sie dies nicht tun wird fpdb höchstwahrscheinlich abstürzen oder " +"falsche Daten speichern/anzeigen." -#: fpdb.pyw:959 +#: fpdb.pyw:941 msgid "Status: Connected to %s database named %s on host %s" -msgstr "" +msgstr "Status: Verbunden mit %s-Datenbank namens %s auf Host: %s" -#: fpdb.pyw:969 +#: fpdb.pyw:951 msgid "" "\n" -"Global lock taken by" +"Global lock taken by %s" msgstr "" +"\n" +"Globaler Lock durch %s genommen" -#: fpdb.pyw:972 +#: fpdb.pyw:954 msgid "" "\n" -"Failed to get global lock, it is currently held by" +"Failed to get global lock, it is currently held by %s" msgstr "" +"\n" +"Konnte globalen Lock nicht ergreifen, wird momentan von %s gehalten" -#: fpdb.pyw:982 +#: fpdb.pyw:964 msgid "Quitting normally" -msgstr "" +msgstr "Beende normal" -#: fpdb.pyw:1006 +#: fpdb.pyw:988 msgid "Global lock released.\n" -msgstr "" +msgstr "Globaler Lock freigegeben.\n" -#: fpdb.pyw:1013 +#: fpdb.pyw:995 msgid "Auto Import" -msgstr "" +msgstr "Autoimport" -#: fpdb.pyw:1020 +#: fpdb.pyw:1002 msgid "Bulk Import" -msgstr "" +msgstr "Massenimport" -#: fpdb.pyw:1026 +#: fpdb.pyw:1008 msgid "eMail Import" -msgstr "" +msgstr "Import per eMail" -#: fpdb.pyw:1033 +#: fpdb.pyw:1015 msgid "Ring Player Stats" msgstr "" -#: fpdb.pyw:1039 +#: fpdb.pyw:1021 msgid "Tourney Player Stats" msgstr "" -#: fpdb.pyw:1045 +#: fpdb.pyw:1027 msgid "Tourney Viewer" -msgstr "" +msgstr "Tourney-Betrachter" -#: fpdb.pyw:1051 +#: fpdb.pyw:1033 msgid "Positional Stats" -msgstr "" +msgstr "Statistiken nach Position" -#: fpdb.pyw:1061 +#: fpdb.pyw:1043 msgid "" "Fpdb needs translators!\n" "If you speak another language and have a few minutes or more to spare get in " @@ -2970,38 +3019,67 @@ msgid "" "You can find the full license texts in agpl-3.0.txt, gpl-2.0.txt, gpl-3.0." "txt and mit.txt in the fpdb installation directory." msgstr "" +"Fpdb braucht Übersetzer!\n" +"Falls Sie eine andere Sprache können und ein paar Minuten oder mehr übrig " +"haben eMailen Sie bitte steffen@schaumburger.info\n" +"\n" +"Willkommen zu fpdb!\n" +"Wenn Sie über neue Versionen informiert werden wollen besuchen Sie bitte " +"https://lists.sourceforge.net/lists/listinfo/fpdb-announce\n" +"Wenn Sie die Entwicklung näher verfolgen möchten besuchen Sie bitte https://" +"lists.sourceforge.net/lists/listinfo/fpdb-main\n" +"\n" +"Dieses Programm ist noch eine Alpha-Version, das Datenbankformat ändert sich " +"also noch manchmal.\n" +"Sie sollten daher Ihre Hand History Dateien immer aufbewahren damit Sie nach " +"einem Update ggf. re-importieren können.\n" +"\n" +"Für Dokumentation besuchen Sie bitte unsere Webseite/Wiki unter http://fpdb." +"sourceforge.net/ .\n" +"Wenn Sie Hilfe brauchen klicken Sie auf \"Contact - Get Help\" auf unserer " +"Webseite oder eMailen Sie mir auf Deutsch an steffen@schaumburger.info.\n" +"\n" +"Dieses Programm ist freie Software (frei wie in Freiheit) teilweise unter " +"der AGPL3-Lizenz und teilweise unter GPL2 und später.\n" +"Das Windows-Installer-Paket enthält Code unter MIT-Lizenz.\n" +"Sie können die vollständigen Lizenztexte im fpdb-Installationsverzeichnis " +"unter agpl-3.0.txt, gpl-2.0.txt, gpl-3.0.txt und mit.txt finden." -#: fpdb.pyw:1078 +#: fpdb.pyw:1060 msgid "Help" -msgstr "" +msgstr "Hilfe" -#: fpdb.pyw:1085 +#: fpdb.pyw:1067 msgid "Graphs" -msgstr "" +msgstr "Graphen" -#: fpdb.pyw:1137 +#: fpdb.pyw:1119 msgid "" "\n" "Note: error output is being diverted to fpdb-errors.txt and HUD-errors.txt " -"in:\n" +"in: %s" msgstr "" -#: fpdb.pyw:1166 +#: fpdb.pyw:1148 msgid "fpdb starting ..." -msgstr "" +msgstr "fpdb startet ..." -#: fpdb.pyw:1223 +#: fpdb.pyw:1205 msgid "FPDB WARNING" -msgstr "" +msgstr "FPDB WARNUNG" -#: fpdb.pyw:1242 +#: fpdb.pyw:1224 msgid "" -"WARNING: Unable to find output hh directory %s\n" +"WARNING: Unable to find output hand history directory %s\n" "\n" " Press YES to create this directory, or NO to select a new one." msgstr "" +"WARNUNG: Konnte Hand History Ausgabeverzeichnis %s nicht finden\n" +"\n" +"Klicken Sie JA um das Verzeichnis zu erstellen, oder NEIN um ein anderes " +"auszuwählen." -#: fpdb.pyw:1250 +#: fpdb.pyw:1232 msgid "" "WARNING: Unable to create hand output directory. Importing is not likely to " "work until this is fixed." @@ -3009,15 +3087,15 @@ msgstr "" #: fpdb_import.py:60 msgid "Import database module: MySQLdb not found" -msgstr "" +msgstr "Import von Datenbankmodul: MySQLdb nicht gefunden" #: fpdb_import.py:67 msgid "Import database module: psycopg2 not found" -msgstr "" +msgstr "Import von Datenbankmodul: psycopg2 nicht gefunden" #: fpdb_import.py:189 msgid "Database ID for %s not found" -msgstr "" +msgstr "Datenbank-ID für %s nicht gefunden" #: fpdb_import.py:191 msgid "" @@ -3026,44 +3104,45 @@ msgid "" msgstr "" #: fpdb_import.py:227 -msgid "Attempted to add non-directory: '%s' as an import directory" +msgid "Attempted to add non-directory '%s' as an import directory" msgstr "" #: fpdb_import.py:237 msgid "Started at %s -- %d files to import. indexes: %s" -msgstr "" +msgstr "Beginn %s -- %d Dateien zu importieren. Indexe: %s" #: fpdb_import.py:246 msgid "No need to drop indexes." -msgstr "" +msgstr "Es ist nicht nötig die Indexe zu löschen." #: fpdb_import.py:265 msgid "writers finished already" -msgstr "" +msgstr "Writer sind bereits fertig" #: fpdb_import.py:268 msgid "waiting for writers to finish ..." -msgstr "" +msgstr "Warte, dass Writer fertig werden ..." #: fpdb_import.py:278 msgid " ... writers finished" -msgstr "" +msgstr " ... Writer sind fertig" #: fpdb_import.py:284 msgid "No need to rebuild indexes." -msgstr "" +msgstr "Es ist nicht nötig die Indexe neu zu erstellen" #: fpdb_import.py:288 msgid "No need to rebuild hudcache." -msgstr "" +msgstr "Es ist nicht nötig HudCache neu zu erstellen" #: fpdb_import.py:313 -msgid "sending finish msg qlen =" +msgid "sending finish message queue length =" msgstr "" #: fpdb_import.py:439 fpdb_import.py:441 -msgid "Converting " -msgstr "" +#, fuzzy +msgid "Converting %s" +msgstr "Konvertiere " #: fpdb_import.py:477 msgid "Hand processed but empty" @@ -3129,3 +3208,14 @@ msgid "" "no gtk directories found in your path - install gtk or edit the path " "manually\n" msgstr "" + +#~ msgid "Fatal Error - Config File Missing" +#~ msgstr "Schwerer Fehler - Konfigurationsdatei nicht gefunden" + +#, fuzzy +#~ msgid "Postgres client reports: Unable to connect - " +#~ msgstr "PostgreSQL Client meldet Fehler: Konnte nicht verbinden - " + +#, fuzzy +#~ msgid "Please check that the Postgres service has been started" +#~ msgstr "Bitte überprüfen Sie, dass der PostgreSQL-Dienst gestartet ist" diff --git a/pyfpdb/locale/fpdb-en_GB.pot b/pyfpdb/locale/fpdb-en_GB.pot index 6776e979..ba73641a 100644 --- a/pyfpdb/locale/fpdb-en_GB.pot +++ b/pyfpdb/locale/fpdb-en_GB.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2010-08-29 14:22+CEST\n" +"POT-Creation-Date: 2010-08-29 20:45+CEST\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -35,19 +35,19 @@ msgstr "" msgid "No bringin found" msgstr "" -#: BetfairToFpdb.py:206 OnGameToFpdb.py:308 PokerStarsToFpdb.py:440 +#: BetfairToFpdb.py:206 OnGameToFpdb.py:339 PokerStarsToFpdb.py:441 msgid "DEBUG: unimplemented readAction: '%s' '%s'" msgstr "" -#: BetfairToFpdb.py:229 PartyPokerToFpdb.py:522 PokerStarsToFpdb.py:467 +#: BetfairToFpdb.py:229 PartyPokerToFpdb.py:525 PokerStarsToFpdb.py:468 msgid "parse input hand history" msgstr "" -#: BetfairToFpdb.py:230 PartyPokerToFpdb.py:523 PokerStarsToFpdb.py:468 +#: BetfairToFpdb.py:230 PartyPokerToFpdb.py:526 PokerStarsToFpdb.py:469 msgid "output translation to" msgstr "" -#: BetfairToFpdb.py:231 PartyPokerToFpdb.py:524 PokerStarsToFpdb.py:469 +#: BetfairToFpdb.py:231 PartyPokerToFpdb.py:527 PokerStarsToFpdb.py:470 msgid "follow (tail -f) the input" msgstr "" @@ -65,98 +65,102 @@ msgid "" "Could not encode: \"%s\"\n" msgstr "" -#: Configuration.py:113 Configuration.py:126 +#: Configuration.py:116 Configuration.py:131 msgid "" "Config file has been created at %s.\n" msgstr "" -#: Configuration.py:125 +#: Configuration.py:130 msgid "" "No %s found\n" " in %s\n" " or %s\n" msgstr "" -#: Configuration.py:131 Configuration.py:132 +#: Configuration.py:135 Configuration.py:136 msgid "" -"Error copying .example file, cannot fall back. Exiting.\n" +"Error copying .example config file, cannot fall back. Exiting.\n" msgstr "" -#: Configuration.py:136 Configuration.py:137 +#: Configuration.py:140 Configuration.py:141 msgid "" "No %s found, cannot fall back. Exiting.\n" msgstr "" -#: Configuration.py:167 +#: Configuration.py:173 msgid "Default logger initialised for " msgstr "" -#: Configuration.py:168 +#: Configuration.py:174 msgid "Default logger intialised for " msgstr "" -#: Configuration.py:179 Database.py:438 Database.py:439 +#: Configuration.py:185 Database.py:438 Database.py:439 msgid "Creating directory: '%s'" msgstr "" -#: Configuration.py:205 +#: Configuration.py:211 msgid "Default encoding set to US-ASCII, defaulting to CP1252 instead -- If you're not on a Mac, please report this problem." msgstr "" -#: Configuration.py:303 +#: Configuration.py:309 msgid "Loading site" msgstr "" -#: Configuration.py:520 +#: Configuration.py:526 msgid "config.general: adding %s = %s" msgstr "" -#: Configuration.py:567 Configuration.py:568 +#: Configuration.py:573 Configuration.py:574 msgid "bad number in xalignment was ignored" msgstr "" -#: Configuration.py:616 +#: Configuration.py:622 msgid "missing config section raw_hands" msgstr "" -#: Configuration.py:622 +#: Configuration.py:628 msgid "Invalid config value for raw_hands.save, defaulting to \"error\"" msgstr "" -#: Configuration.py:629 +#: Configuration.py:635 msgid "Invalid config value for raw_hands.compression, defaulting to \"none\"" msgstr "" -#: Configuration.py:642 +#: Configuration.py:648 msgid "missing config section raw_tourneys" msgstr "" -#: Configuration.py:648 +#: Configuration.py:654 msgid "Invalid config value for raw_tourneys.save, defaulting to \"error\"" msgstr "" -#: Configuration.py:655 +#: Configuration.py:661 msgid "Invalid config value for raw_tourneys.compression, defaulting to \"none\"" msgstr "" -#: Configuration.py:673 Configuration.py:674 +#: Configuration.py:679 Configuration.py:680 msgid "Configuration file %s not found. Using defaults." msgstr "" -#: Configuration.py:690 +#: Configuration.py:708 msgid "Reading configuration file %s" msgstr "" -#: Configuration.py:691 +#: Configuration.py:709 msgid "" "\n" "Reading configuration file %s\n" msgstr "" -#: Configuration.py:696 +#: Configuration.py:715 msgid "Error parsing %s. See error log file." msgstr "" +#: Configuration.py:831 +msgid "Error parsing example file %s. See error log file." +msgstr "" + #: Database.py:74 msgid "Not using sqlalchemy connection pool." msgstr "" @@ -449,7 +453,7 @@ msgstr "" msgid "get_stats took: %4.3f seconds" msgstr "" -#: Database.py:2373 Tables.py:448 +#: Database.py:2373 msgid "press enter to continue" msgstr "" @@ -502,7 +506,7 @@ msgid "Grouping:" msgstr "" #: Filters.py:66 -msgid "Show Position Stats:" +msgid "Show Position Stats" msgstr "" #: Filters.py:67 TourneyFilters.py:60 @@ -577,15 +581,23 @@ msgstr "" msgid "No games returned from database" msgstr "" +#: Filters.py:894 +msgid "From:" +msgstr "" + +#: Filters.py:908 +msgid "To:" +msgstr "" + #: Filters.py:913 msgid " Clear Dates " msgstr "" -#: Filters.py:940 fpdb.pyw:722 +#: Filters.py:940 fpdb.pyw:723 msgid "Pick a date" msgstr "" -#: Filters.py:946 fpdb.pyw:728 +#: Filters.py:946 fpdb.pyw:729 msgid "Done" msgstr "" @@ -594,15 +606,15 @@ msgid "Time between imports in seconds:" msgstr "" #: GuiAutoImport.py:116 GuiAutoImport.py:184 GuiAutoImport.py:261 -msgid " Start _Autoimport " +msgid " Start _Auto Import " msgstr "" #: GuiAutoImport.py:135 -msgid "AutoImport Ready." +msgid "Auto Import Ready." msgstr "" #: GuiAutoImport.py:148 -msgid "Please choose the path that you want to auto import" +msgid "Please choose the path that you want to Auto Import" msgstr "" #: GuiAutoImport.py:171 @@ -610,7 +622,7 @@ msgid " _Auto Import Running " msgstr "" #: GuiAutoImport.py:182 -msgid " Stop _Autoimport " +msgid " Stop _Auto Import " msgstr "" #: GuiAutoImport.py:207 @@ -620,7 +632,7 @@ msgid "" msgstr "" #: GuiAutoImport.py:209 -msgid " _Stop Autoimport " +msgid " _Stop Auto Import " msgstr "" #: GuiAutoImport.py:225 @@ -636,19 +648,19 @@ msgstr "" #: GuiAutoImport.py:249 msgid "" "\n" -"auto-import aborted - global lock not available" +"Auto Import aborted - global lock not available" msgstr "" #: GuiAutoImport.py:254 msgid "" "\n" -"Stopping autoimport - global lock released." +"Stopping Auto Import - global lock released." msgstr "" #: GuiAutoImport.py:256 msgid "" "\n" -" * Stop Autoimport: HUD already terminated" +" * Stop Auto Import: HUD already terminated" msgstr "" #: GuiAutoImport.py:283 @@ -678,7 +690,7 @@ msgid "Import Complete" msgstr "" #: GuiBulkImport.py:139 -msgid "bulk-import aborted - global lock not available" +msgid "bulk import aborted - global lock not available" msgstr "" #: GuiBulkImport.py:165 @@ -729,7 +741,7 @@ msgstr "" msgid "Drop HudCache:" msgstr "" -#: GuiBulkImport.py:297 fpdb.pyw:831 +#: GuiBulkImport.py:297 fpdb.pyw:814 msgid "_Bulk Import" msgstr "" @@ -801,95 +813,159 @@ msgstr "" msgid "GuiBulkImport done: Stored: %d \tDuplicates: %d \tPartial: %d \tErrors: %d in %s seconds - %.0f/sec" msgstr "" -#: GuiDatabase.py:106 GuiLogView.py:96 -msgid "Refresh" +#: GuiDatabase.py:117 +msgid "_Add" msgstr "" -#: GuiDatabase.py:111 +#: GuiDatabase.py:121 +msgid "_Refresh" +msgstr "" + +#: GuiDatabase.py:125 msgid "Type" msgstr "" -#: GuiDatabase.py:112 +#: GuiDatabase.py:126 msgid "Name" msgstr "" -#: GuiDatabase.py:113 +#: GuiDatabase.py:127 msgid "Description" msgstr "" -#: GuiDatabase.py:114 GuiImapFetcher.py:119 +#: GuiDatabase.py:128 GuiDatabase.py:459 GuiImapFetcher.py:119 msgid "Username" msgstr "" -#: GuiDatabase.py:115 GuiImapFetcher.py:119 +#: GuiDatabase.py:129 GuiDatabase.py:466 GuiImapFetcher.py:119 msgid "Password" msgstr "" -#: GuiDatabase.py:116 +#: GuiDatabase.py:130 msgid "Host" msgstr "" -#: GuiDatabase.py:117 -msgid "Default" +#: GuiDatabase.py:131 +msgid "Open" msgstr "" -#: GuiDatabase.py:118 +#: GuiDatabase.py:132 msgid "Status" msgstr "" -#: GuiDatabase.py:251 +#: GuiDatabase.py:266 msgid "Testing database connections ... " msgstr "" -#: GuiDatabase.py:281 -msgid "loaddbs: trying to connect to: %s/%s, %s, %s/%s" -msgstr "" - -#: GuiDatabase.py:284 -msgid " connected ok" -msgstr "" - -#: GuiDatabase.py:291 -msgid " not connected but no exception" -msgstr "" - -#: GuiDatabase.py:293 fpdb.pyw:904 -msgid "MySQL Server reports: Access denied. Are your permissions set correctly?" -msgstr "" - -#: GuiDatabase.py:297 -msgid "MySQL client reports: 2002 or 2003 error. Unable to connect - Please check that the MySQL service has been started" -msgstr "" - -#: GuiDatabase.py:301 fpdb.pyw:909 -msgid "Postgres Server reports: Access denied. Are your permissions set correctly?" -msgstr "" - -#: GuiDatabase.py:304 -msgid "Postgres client reports: Unable to connect - Please check that the Postgres service has been started" -msgstr "" - -#: GuiDatabase.py:321 +#: GuiDatabase.py:293 msgid "finished." msgstr "" -#: GuiDatabase.py:331 -msgid "loaddbs error: " +#: GuiDatabase.py:303 +msgid "loadDbs error: " msgstr "" -#: GuiDatabase.py:352 GuiLogView.py:200 GuiTourneyPlayerStats.py:466 +#: GuiDatabase.py:324 GuiLogView.py:200 GuiTourneyPlayerStats.py:466 msgid "***sortCols error: " msgstr "" -#: GuiDatabase.py:354 +#: GuiDatabase.py:326 msgid "sortCols error: " msgstr "" -#: GuiDatabase.py:424 GuiLogView.py:213 +#: GuiDatabase.py:371 +msgid "testDB: trying to connect to: %s/%s, %s, %s/%s" +msgstr "" + +#: GuiDatabase.py:374 +msgid " connected ok" +msgstr "" + +#: GuiDatabase.py:381 +msgid " not connected but no exception" +msgstr "" + +#: GuiDatabase.py:383 fpdb.pyw:886 +msgid "MySQL Server reports: Access denied. Are your permissions set correctly?" +msgstr "" + +#: GuiDatabase.py:387 fpdb.pyw:888 +msgid "MySQL client reports: 2002 or 2003 error. Unable to connect - " +msgstr "" + +#: GuiDatabase.py:388 fpdb.pyw:889 +msgid "Please check that the MySQL service has been started" +msgstr "" + +#: GuiDatabase.py:392 fpdb.pyw:891 +msgid "PostgreSQL Server reports: Access denied. Are your permissions set correctly?" +msgstr "" + +#: GuiDatabase.py:395 fpdb.pyw:893 +msgid "PostgreSQL client reports: Unable to connect - " +msgstr "" + +#: GuiDatabase.py:396 fpdb.pyw:894 +msgid "Please check that the PostgreSQL service has been started" +msgstr "" + +#: GuiDatabase.py:406 +msgid "db connection to " +msgstr "" + +#: GuiDatabase.py:434 +msgid "DB Type" +msgstr "" + +#: GuiDatabase.py:444 +msgid "DB Name" +msgstr "" + +#: GuiDatabase.py:452 +msgid "DB Description" +msgstr "" + +#: GuiDatabase.py:473 +msgid "Host Computer" +msgstr "" + +#: GuiDatabase.py:528 +msgid "Database created" +msgstr "" + +#: GuiDatabase.py:531 +msgid "Database creation failed" +msgstr "" + +#: GuiDatabase.py:550 +msgid "No Database Name given" +msgstr "" + +#: GuiDatabase.py:553 +msgid "No Database Description given" +msgstr "" + +#: GuiDatabase.py:556 +msgid "No Username given" +msgstr "" + +#: GuiDatabase.py:559 +msgid "No Password given" +msgstr "" + +#: GuiDatabase.py:562 +msgid "No Host given" +msgstr "" + +#: GuiDatabase.py:589 +msgid "Do you want to try again?" +msgstr "" + +#: GuiDatabase.py:702 GuiLogView.py:213 msgid "Test Log Viewer" msgstr "" -#: GuiDatabase.py:429 GuiLogView.py:218 +#: GuiDatabase.py:707 GuiLogView.py:218 msgid "Log Viewer" msgstr "" @@ -1030,6 +1106,10 @@ msgstr "" msgid "Log Messages" msgstr "" +#: GuiLogView.py:96 +msgid "Refresh" +msgstr "" + #: GuiPositionalStats.py:146 msgid "DEBUG: activesite set to %s" msgstr "" @@ -1154,7 +1234,7 @@ msgid "" "Note: error output is being diverted to:\n" msgstr "" -#: HUD_main.pyw:96 fpdb.pyw:1138 +#: HUD_main.pyw:96 fpdb.pyw:1120 msgid "" "\n" "Any major error will be reported there _only_.\n" @@ -1226,351 +1306,351 @@ msgid "" "Using db name = %s\n" msgstr "" -#: Hand.py:150 +#: Hand.py:151 msgid "BB" msgstr "" -#: Hand.py:151 +#: Hand.py:152 msgid "SB" msgstr "" -#: Hand.py:152 +#: Hand.py:153 msgid "BUTTONPOS" msgstr "" -#: Hand.py:153 +#: Hand.py:154 msgid "HAND NO." msgstr "" -#: Hand.py:154 TourneySummary.py:134 +#: Hand.py:155 TourneySummary.py:134 msgid "SITE" msgstr "" -#: Hand.py:155 +#: Hand.py:156 msgid "TABLE NAME" msgstr "" -#: Hand.py:156 TourneySummary.py:144 +#: Hand.py:157 TourneySummary.py:144 msgid "HERO" msgstr "" -#: Hand.py:157 TourneySummary.py:145 +#: Hand.py:158 TourneySummary.py:145 msgid "MAXSEATS" msgstr "" -#: Hand.py:158 +#: Hand.py:159 msgid "LEVEL" msgstr "" -#: Hand.py:159 TourneySummary.py:150 +#: Hand.py:160 TourneySummary.py:150 msgid "MIXED" msgstr "" -#: Hand.py:160 +#: Hand.py:161 msgid "LASTBET" msgstr "" -#: Hand.py:161 +#: Hand.py:162 msgid "ACTION STREETS" msgstr "" -#: Hand.py:162 +#: Hand.py:163 msgid "STREETS" msgstr "" -#: Hand.py:163 +#: Hand.py:164 msgid "ALL STREETS" msgstr "" -#: Hand.py:164 +#: Hand.py:165 msgid "COMMUNITY STREETS" msgstr "" -#: Hand.py:165 +#: Hand.py:166 msgid "HOLE STREETS" msgstr "" -#: Hand.py:166 +#: Hand.py:167 msgid "COUNTED SEATS" msgstr "" -#: Hand.py:167 +#: Hand.py:168 msgid "DEALT" msgstr "" -#: Hand.py:168 +#: Hand.py:169 msgid "SHOWN" msgstr "" -#: Hand.py:169 +#: Hand.py:170 msgid "MUCKED" msgstr "" -#: Hand.py:170 +#: Hand.py:171 msgid "TOTAL POT" msgstr "" -#: Hand.py:171 +#: Hand.py:172 msgid "TOTAL COLLECTED" msgstr "" -#: Hand.py:172 +#: Hand.py:173 msgid "RAKE" msgstr "" -#: Hand.py:173 TourneySummary.py:135 +#: Hand.py:174 TourneySummary.py:135 msgid "START TIME" msgstr "" -#: Hand.py:174 +#: Hand.py:175 msgid "TOURNAMENT NO" msgstr "" -#: Hand.py:175 TourneySummary.py:140 +#: Hand.py:176 TourneySummary.py:140 msgid "TOURNEY ID" msgstr "" -#: Hand.py:176 TourneySummary.py:139 +#: Hand.py:177 TourneySummary.py:139 msgid "TOURNEY TYPE ID" msgstr "" -#: Hand.py:177 TourneySummary.py:141 +#: Hand.py:178 TourneySummary.py:141 msgid "BUYIN" msgstr "" -#: Hand.py:178 +#: Hand.py:179 msgid "BUYIN CURRENCY" msgstr "" -#: Hand.py:179 +#: Hand.py:180 msgid "BUYIN CHIPS" msgstr "" -#: Hand.py:180 TourneySummary.py:142 +#: Hand.py:181 TourneySummary.py:142 msgid "FEE" msgstr "" -#: Hand.py:181 +#: Hand.py:182 msgid "IS REBUY" msgstr "" -#: Hand.py:182 +#: Hand.py:183 msgid "IS ADDON" msgstr "" -#: Hand.py:183 +#: Hand.py:184 msgid "IS KO" msgstr "" -#: Hand.py:184 TourneySummary.py:166 +#: Hand.py:185 TourneySummary.py:166 msgid "KO BOUNTY" msgstr "" -#: Hand.py:185 +#: Hand.py:186 msgid "IS MATRIX" msgstr "" -#: Hand.py:186 +#: Hand.py:187 msgid "IS SHOOTOUT" msgstr "" -#: Hand.py:187 TourneySummary.py:167 +#: Hand.py:188 TourneySummary.py:167 msgid "TOURNEY COMMENT" msgstr "" -#: Hand.py:190 TourneySummary.py:179 +#: Hand.py:191 TourneySummary.py:179 msgid "PLAYERS" msgstr "" -#: Hand.py:191 +#: Hand.py:192 msgid "STACKS" msgstr "" -#: Hand.py:192 +#: Hand.py:193 msgid "POSTED" msgstr "" -#: Hand.py:193 +#: Hand.py:194 msgid "POT" msgstr "" -#: Hand.py:194 +#: Hand.py:195 msgid "SEATING" msgstr "" -#: Hand.py:195 +#: Hand.py:196 msgid "GAMETYPE" msgstr "" -#: Hand.py:196 +#: Hand.py:197 msgid "ACTION" msgstr "" -#: Hand.py:197 +#: Hand.py:198 msgid "COLLECTEES" msgstr "" -#: Hand.py:198 +#: Hand.py:199 msgid "BETS" msgstr "" -#: Hand.py:199 +#: Hand.py:200 msgid "BOARD" msgstr "" -#: Hand.py:200 +#: Hand.py:201 msgid "DISCARDS" msgstr "" -#: Hand.py:201 +#: Hand.py:202 msgid "HOLECARDS" msgstr "" -#: Hand.py:202 +#: Hand.py:203 msgid "TOURNEYS PLAYER IDS" msgstr "" -#: Hand.py:225 Hand.py:1242 +#: Hand.py:226 Hand.py:1243 msgid "[ERROR] Tried to add holecards for unknown player: %s" msgstr "" -#: Hand.py:278 +#: Hand.py:279 msgid "Hand.insert(): hid #: %s is a duplicate" msgstr "" -#: Hand.py:317 -msgid "markstreets didn't match - Assuming hand cancelled" +#: Hand.py:318 +msgid "markstreets didn't match - Assuming hand %s was cancelled" msgstr "" -#: Hand.py:319 +#: Hand.py:320 msgid "FpdbParseError: markStreets appeared to fail: First 100 chars: '%s'" msgstr "" -#: Hand.py:323 +#: Hand.py:324 msgid "DEBUG: checkPlayerExists %s fail on hand number %s" msgstr "" -#: Hand.py:324 +#: Hand.py:325 msgid "checkPlayerExists: '%s fail on hand number %s" msgstr "" -#: Hand.py:405 +#: Hand.py:406 msgid "%s %s calls %s" msgstr "" -#: Hand.py:475 +#: Hand.py:476 msgid "%s %s raise %s" msgstr "" -#: Hand.py:486 +#: Hand.py:487 msgid "%s %s bets %s" msgstr "" -#: Hand.py:505 +#: Hand.py:506 msgid "%s %s folds" msgstr "" -#: Hand.py:514 +#: Hand.py:515 msgid "%s %s checks" msgstr "" -#: Hand.py:534 +#: Hand.py:535 msgid "addShownCards %s hole=%s all=%s" msgstr "" -#: Hand.py:645 +#: Hand.py:646 msgid "*** ERROR - HAND: calling writeGameLine with unexpected STARTTIME value, expecting datetime.date object, received:" msgstr "" -#: Hand.py:646 +#: Hand.py:647 msgid "*** Make sure your HandHistoryConverter is setting hand.startTime properly!" msgstr "" -#: Hand.py:647 +#: Hand.py:648 msgid "*** Game String:" msgstr "" -#: Hand.py:701 +#: Hand.py:702 msgid "*** Parse error reading blinds (check compilePlayerRegexs as a likely culprit)" msgstr "" -#: Hand.py:728 +#: Hand.py:729 msgid "HoldemOmahaHand.__init__:Can't assemble hand from db without a handid" msgstr "" -#: Hand.py:730 +#: Hand.py:731 msgid "HoldemOmahaHand.__init__:Neither HHC nor DB+handid provided" msgstr "" -#: Hand.py:1111 +#: Hand.py:1112 msgid "*** DEALING HANDS ***" msgstr "" -#: Hand.py:1116 +#: Hand.py:1117 msgid "Dealt to %s: [%s]" msgstr "" -#: Hand.py:1121 +#: Hand.py:1122 msgid "*** FIRST DRAW ***" msgstr "" -#: Hand.py:1131 +#: Hand.py:1132 msgid "*** SECOND DRAW ***" msgstr "" -#: Hand.py:1141 +#: Hand.py:1142 msgid "*** THIRD DRAW ***" msgstr "" -#: Hand.py:1151 Hand.py:1369 +#: Hand.py:1152 Hand.py:1370 msgid "*** SHOW DOWN ***" msgstr "" -#: Hand.py:1166 Hand.py:1384 +#: Hand.py:1167 Hand.py:1385 msgid "*** SUMMARY ***" msgstr "" -#: Hand.py:1251 +#: Hand.py:1252 msgid "%s %s completes %s" msgstr "" -#: Hand.py:1269 +#: Hand.py:1270 msgid "Bringin: %s, %s" msgstr "" -#: Hand.py:1309 +#: Hand.py:1310 msgid "*** 3RD STREET ***" msgstr "" -#: Hand.py:1323 +#: Hand.py:1324 msgid "*** 4TH STREET ***" msgstr "" -#: Hand.py:1335 +#: Hand.py:1336 msgid "*** 5TH STREET ***" msgstr "" -#: Hand.py:1347 +#: Hand.py:1348 msgid "*** 6TH STREET ***" msgstr "" -#: Hand.py:1357 +#: Hand.py:1358 msgid "*** RIVER ***" msgstr "" -#: Hand.py:1449 +#: Hand.py:1450 msgid "join_holecards: # of holecards should be either < 4, 4 or 7 - 5 and 6 should be impossible for anyone who is not a hero" msgstr "" -#: Hand.py:1450 +#: Hand.py:1451 msgid "join_holcards: holecards(%s): %s" msgstr "" -#: Hand.py:1533 +#: Hand.py:1534 msgid "DEBUG: call Pot.end() before printing pot total" msgstr "" -#: Hand.py:1535 +#: Hand.py:1536 msgid "FpdbError in printing Hand object" msgstr "" @@ -1693,138 +1773,128 @@ msgid "" " on %s." msgstr "" -#: Hud.py:149 +#: Hud.py:148 msgid "Kill This HUD" msgstr "" -#: Hud.py:154 +#: Hud.py:153 msgid "Save HUD Layout" msgstr "" -#: Hud.py:158 +#: Hud.py:157 msgid "Reposition StatWindows" msgstr "" -#: Hud.py:162 +#: Hud.py:161 msgid "Show Player Stats" msgstr "" -#: Hud.py:167 Hud.py:236 +#: Hud.py:166 Hud.py:235 msgid "For This Blind Level Only" msgstr "" -#: Hud.py:172 Hud.py:241 +#: Hud.py:171 Hud.py:240 msgid "For Multiple Blind Levels:" msgstr "" -#: Hud.py:175 Hud.py:244 +#: Hud.py:174 Hud.py:243 msgid " 0.5 to 2.0 x Current Blinds" msgstr "" -#: Hud.py:180 Hud.py:249 +#: Hud.py:179 Hud.py:248 msgid " 0.33 to 3.0 x Current Blinds" msgstr "" -#: Hud.py:185 Hud.py:254 +#: Hud.py:184 Hud.py:253 msgid " 0.1 to 10 x Current Blinds" msgstr "" -#: Hud.py:190 Hud.py:259 +#: Hud.py:189 Hud.py:258 msgid " All Levels" msgstr "" -#: Hud.py:195 Hud.py:264 +#: Hud.py:194 Hud.py:263 msgid "For #Seats:" msgstr "" -#: Hud.py:198 Hud.py:267 +#: Hud.py:197 Hud.py:266 msgid " Any Number" msgstr "" -#: Hud.py:203 Hud.py:272 +#: Hud.py:202 Hud.py:271 msgid " Custom" msgstr "" -#: Hud.py:208 Hud.py:277 +#: Hud.py:207 Hud.py:276 msgid " Exact" msgstr "" -#: Hud.py:213 Hud.py:282 +#: Hud.py:212 Hud.py:281 msgid "Since:" msgstr "" -#: Hud.py:216 Hud.py:285 +#: Hud.py:215 Hud.py:284 msgid " All Time" msgstr "" -#: Hud.py:221 Hud.py:290 +#: Hud.py:220 Hud.py:289 msgid " Session" msgstr "" -#: Hud.py:226 Hud.py:295 +#: Hud.py:225 Hud.py:294 msgid " %s Days" msgstr "" -#: Hud.py:231 +#: Hud.py:230 msgid "Show Opponent Stats" msgstr "" -#: Hud.py:353 +#: Hud.py:352 msgid "Debug StatWindows" msgstr "" -#: Hud.py:357 +#: Hud.py:356 msgid "Set max seats" msgstr "" -#: Hud.py:543 +#: Hud.py:542 msgid "Updating config file" msgstr "" -#: Hud.py:552 +#: Hud.py:551 msgid "" "No layout found for %d-max games for site %s\n" msgstr "" -#: Hud.py:566 +#: Hud.py:565 msgid "" "exception in Hud.adj_seats\n" "\n" msgstr "" -#: Hud.py:567 +#: Hud.py:566 msgid "error is %s" msgstr "" -#: Hud.py:574 +#: Hud.py:573 msgid "" "Error finding actual seat.\n" msgstr "" -#: Hud.py:590 +#: Hud.py:589 msgid "" "------------------------------------------------------------\n" "Creating hud from hand %s\n" msgstr "" -#: Hud.py:639 +#: Hud.py:638 msgid "KeyError at the start of the for loop in update in hud_main. How this can possibly happen is totally beyond my comprehension. Your HUD may be about to get really weird. -Eric" msgstr "" -#: Hud.py:640 +#: Hud.py:639 msgid "(btw, the key was %s and statd is %s" msgstr "" -#: Hud.py:947 -msgid "" -"Fake main window, blah blah, blah\n" -"blah, blah" -msgstr "" - -#: Hud.py:955 -msgid "Table not found." -msgstr "" - #: ImapFetcher.py:54 msgid "response to logging in:" msgstr "" @@ -1837,36 +1907,36 @@ msgstr "" msgid "No Name" msgstr "" -#: OnGameToFpdb.py:153 PkrToFpdb.py:144 PokerStarsToFpdb.py:189 +#: OnGameToFpdb.py:178 PkrToFpdb.py:144 PokerStarsToFpdb.py:189 msgid "determineGameType: Unable to recognise gametype from: '%s'" msgstr "" -#: OnGameToFpdb.py:154 PkrToFpdb.py:145 PkrToFpdb.py:173 +#: OnGameToFpdb.py:179 OnGameToFpdb.py:193 PkrToFpdb.py:145 PkrToFpdb.py:173 #: PokerStarsToFpdb.py:190 PokerStarsToFpdb.py:220 msgid "determineGameType: Raising FpdbParseError" msgstr "" -#: OnGameToFpdb.py:155 PkrToFpdb.py:146 PokerStarsToFpdb.py:191 +#: OnGameToFpdb.py:180 PkrToFpdb.py:146 PokerStarsToFpdb.py:191 msgid "Unable to recognise gametype from: '%s'" msgstr "" -#: OnGameToFpdb.py:235 PartyPokerToFpdb.py:351 PokerStarsToFpdb.py:320 +#: OnGameToFpdb.py:192 +msgid "determineGameType: limit not found in self.limits(%s). hand: '%s'" +msgstr "" + +#: OnGameToFpdb.py:194 +msgid "limit not found in self.limits(%s). hand: '%s'" +msgstr "" + +#: OnGameToFpdb.py:268 PartyPokerToFpdb.py:351 PokerStarsToFpdb.py:321 msgid "readButton: not found" msgstr "" -#: OnGameToFpdb.py:250 -msgid "readBlinds starting" +#: OnGameToFpdb.py:288 +msgid "readBlinds in noSB exception - no SB created" msgstr "" -#: OnGameToFpdb.py:254 -msgid "re_postSB failed, hand=" -msgstr "" - -#: OnGameToFpdb.py:257 -msgid "readBlinds in noSB exception" -msgstr "" - -#: OnGameToFpdb.py:265 PokerStarsToFpdb.py:358 +#: OnGameToFpdb.py:296 PokerStarsToFpdb.py:359 msgid "reading antes" msgstr "" @@ -1950,186 +2020,166 @@ msgstr "" msgid "in not result starttime" msgstr "" -#: PokerStarsToFpdb.py:273 +#: PokerStarsToFpdb.py:274 msgid "failed to detect currency" msgstr "" -#: Stats.py:103 -msgid "exception getting stat %s for player %s %s" -msgstr "" - -#: Stats.py:104 -msgid "Stats.do_stat result = %s" -msgstr "" - -#: Stats.py:113 -msgid "error: %s" -msgstr "" - -#: Stats.py:132 Stats.py:133 +#: Stats.py:122 Stats.py:123 msgid "Total Profit" msgstr "" -#: Stats.py:154 Stats.py:161 +#: Stats.py:144 Stats.py:151 msgid "Voluntarily Put In Pot Pre-Flop%" msgstr "" -#: Stats.py:174 Stats.py:182 +#: Stats.py:164 Stats.py:172 msgid "Pre-Flop Raise %" msgstr "" -#: Stats.py:195 Stats.py:203 +#: Stats.py:185 Stats.py:193 msgid "% went to showdown" msgstr "" -#: Stats.py:216 Stats.py:224 +#: Stats.py:206 Stats.py:214 msgid "% won money at showdown" msgstr "" -#: Stats.py:237 Stats.py:246 +#: Stats.py:227 Stats.py:236 msgid "profit/100hands" msgstr "" -#: Stats.py:240 +#: Stats.py:230 msgid "exception calcing p/100: 100 * %d / %d" msgstr "" -#: Stats.py:259 Stats.py:268 +#: Stats.py:249 Stats.py:258 msgid "big blinds/100 hands" msgstr "" -#: Stats.py:281 Stats.py:290 +#: Stats.py:271 Stats.py:280 msgid "Big Bets/100 hands" msgstr "" -#: Stats.py:284 +#: Stats.py:274 msgid "exception calcing BB/100: " msgstr "" -#: Stats.py:304 Stats.py:315 +#: Stats.py:294 Stats.py:303 msgid "Flop Seen %" msgstr "" -#: Stats.py:338 Stats.py:346 +#: Stats.py:326 Stats.py:335 msgid "number hands seen" msgstr "" -#: Stats.py:359 Stats.py:367 +#: Stats.py:348 Stats.py:356 msgid "folded flop/4th" msgstr "" -#: Stats.py:380 +#: Stats.py:369 msgid "% steal attempted" msgstr "" -#: Stats.py:395 Stats.py:402 +#: Stats.py:384 Stats.py:391 msgid "% folded SB to steal" msgstr "" -#: Stats.py:414 Stats.py:421 +#: Stats.py:403 Stats.py:410 msgid "% folded BB to steal" msgstr "" -#: Stats.py:436 Stats.py:443 +#: Stats.py:425 Stats.py:432 msgid "% folded blind to steal" msgstr "" -#: Stats.py:455 Stats.py:462 +#: Stats.py:444 Stats.py:451 msgid "% 3/4 Bet preflop/3rd" msgstr "" -#: Stats.py:474 Stats.py:481 +#: Stats.py:463 Stats.py:470 msgid "% won$/saw flop/4th" msgstr "" -#: Stats.py:493 Stats.py:500 +#: Stats.py:482 Stats.py:489 msgid "Aggression Freq flop/4th" msgstr "" -#: Stats.py:512 Stats.py:519 +#: Stats.py:501 Stats.py:508 msgid "Aggression Freq turn/5th" msgstr "" -#: Stats.py:531 Stats.py:538 +#: Stats.py:520 Stats.py:527 msgid "Aggression Freq river/6th" msgstr "" -#: Stats.py:550 Stats.py:557 +#: Stats.py:539 Stats.py:546 msgid "Aggression Freq 7th" msgstr "" -#: Stats.py:576 Stats.py:583 +#: Stats.py:565 Stats.py:572 msgid "Post-Flop Aggression Freq" msgstr "" -#: Stats.py:604 Stats.py:611 +#: Stats.py:593 Stats.py:600 msgid "Aggression Freq" msgstr "" -#: Stats.py:630 Stats.py:637 +#: Stats.py:619 Stats.py:626 msgid "Aggression Factor" msgstr "" -#: Stats.py:654 Stats.py:661 +#: Stats.py:643 Stats.py:650 msgid "% continuation bet " msgstr "" -#: Stats.py:673 Stats.py:680 +#: Stats.py:662 Stats.py:669 msgid "% continuation bet flop/4th" msgstr "" -#: Stats.py:692 Stats.py:699 +#: Stats.py:681 Stats.py:688 msgid "% continuation bet turn/5th" msgstr "" -#: Stats.py:711 Stats.py:718 +#: Stats.py:700 Stats.py:707 msgid "% continuation bet river/6th" msgstr "" -#: Stats.py:730 Stats.py:737 +#: Stats.py:719 Stats.py:726 msgid "% continuation bet 7th" msgstr "" -#: Stats.py:749 Stats.py:756 +#: Stats.py:738 Stats.py:745 msgid "% fold frequency flop/4th" msgstr "" -#: Stats.py:768 Stats.py:775 +#: Stats.py:757 Stats.py:764 msgid "% fold frequency turn/5th" msgstr "" -#: Stats.py:787 Stats.py:794 +#: Stats.py:776 Stats.py:783 msgid "% fold frequency river/6th" msgstr "" -#: Stats.py:806 Stats.py:813 +#: Stats.py:795 Stats.py:802 msgid "% fold frequency 7th" msgstr "" -#: Stats.py:833 +#: Stats.py:822 msgid "Example stats, player = %s hand = %s:" msgstr "" -#: Stats.py:866 +#: Stats.py:855 msgid "" "\n" "\n" "Legal stats:" msgstr "" -#: Stats.py:867 +#: Stats.py:856 msgid "" "(add _0 to name to display with 0 decimal places, _1 to display with 1, etc)\n" msgstr "" -#: Tables.py:234 -msgid "Found unknown table = %s" -msgstr "" - -#: Tables.py:261 -msgid "attach to window" -msgstr "" - #: Tables_Demo.py:72 msgid "Fake HUD Main Window" msgstr "" @@ -2514,356 +2564,327 @@ msgid "Confirm deleting and recreating tables" msgstr "" #: fpdb.pyw:547 -msgid "Please confirm that you want to (re-)create the tables. If there already are tables in the database " +msgid "Please confirm that you want to (re-)create the tables." msgstr "" #: fpdb.pyw:548 msgid "" -" they will be deleted and you will have to re-import your histories.\n" -"This may take a while." +" If there already are tables in the database %s on %s they will be deleted and you will have to re-import your histories.\n" msgstr "" -#: fpdb.pyw:573 +#: fpdb.pyw:549 +msgid "This may take a while." +msgstr "" + +#: fpdb.pyw:574 msgid "User cancelled recreating tables" msgstr "" -#: fpdb.pyw:580 +#: fpdb.pyw:581 msgid "Please confirm that you want to re-create the HUD cache." msgstr "" -#: fpdb.pyw:588 +#: fpdb.pyw:589 msgid " Hero's cache starts: " msgstr "" -#: fpdb.pyw:602 +#: fpdb.pyw:603 msgid " Villains' cache starts: " msgstr "" -#: fpdb.pyw:615 +#: fpdb.pyw:616 msgid " Rebuilding HUD Cache ... " msgstr "" -#: fpdb.pyw:623 +#: fpdb.pyw:624 msgid "User cancelled rebuilding hud cache" msgstr "" -#: fpdb.pyw:635 +#: fpdb.pyw:636 msgid "Confirm rebuilding database indexes" msgstr "" -#: fpdb.pyw:636 +#: fpdb.pyw:637 msgid "Please confirm that you want to rebuild the database indexes." msgstr "" -#: fpdb.pyw:644 +#: fpdb.pyw:645 msgid " Rebuilding Indexes ... " msgstr "" -#: fpdb.pyw:651 +#: fpdb.pyw:652 msgid " Cleaning Database ... " msgstr "" -#: fpdb.pyw:656 +#: fpdb.pyw:657 msgid " Analyzing Database ... " msgstr "" -#: fpdb.pyw:661 +#: fpdb.pyw:662 msgid "User cancelled rebuilding db indexes" msgstr "" -#: fpdb.pyw:756 +#: fpdb.pyw:757 msgid "Unimplemented: Save Profile (try saving a HUD layout, that should do it)" msgstr "" -#: fpdb.pyw:759 -msgid "Fatal Error - Config File Missing" -msgstr "" - -#: fpdb.pyw:761 -msgid "Please copy the config file from the docs folder to:" -msgstr "" - -#: fpdb.pyw:769 -msgid "and edit it according to the install documentation at http://fpdb.sourceforge.net" -msgstr "" - -#: fpdb.pyw:825 +#: fpdb.pyw:808 msgid "_Main" msgstr "" -#: fpdb.pyw:826 fpdb.pyw:853 +#: fpdb.pyw:809 fpdb.pyw:836 msgid "_Quit" msgstr "" -#: fpdb.pyw:827 +#: fpdb.pyw:810 msgid "L" msgstr "" -#: fpdb.pyw:827 +#: fpdb.pyw:810 msgid "_Load Profile (broken)" msgstr "" -#: fpdb.pyw:828 +#: fpdb.pyw:811 msgid "S" msgstr "" -#: fpdb.pyw:828 +#: fpdb.pyw:811 msgid "_Save Profile (todo)" msgstr "" -#: fpdb.pyw:829 +#: fpdb.pyw:812 msgid "F" msgstr "" -#: fpdb.pyw:829 +#: fpdb.pyw:812 msgid "Pre_ferences" msgstr "" -#: fpdb.pyw:830 +#: fpdb.pyw:813 msgid "_Import" msgstr "" -#: fpdb.pyw:831 +#: fpdb.pyw:814 msgid "B" msgstr "" -#: fpdb.pyw:832 +#: fpdb.pyw:815 msgid "I" msgstr "" -#: fpdb.pyw:832 +#: fpdb.pyw:815 msgid "_Import through eMail/IMAP" msgstr "" -#: fpdb.pyw:833 +#: fpdb.pyw:816 msgid "_Viewers" msgstr "" -#: fpdb.pyw:834 +#: fpdb.pyw:817 msgid "A" msgstr "" -#: fpdb.pyw:834 +#: fpdb.pyw:817 msgid "_Auto Import and HUD" msgstr "" -#: fpdb.pyw:835 +#: fpdb.pyw:818 msgid "H" msgstr "" -#: fpdb.pyw:835 +#: fpdb.pyw:818 msgid "_HUD Configurator" msgstr "" -#: fpdb.pyw:836 +#: fpdb.pyw:819 msgid "G" msgstr "" -#: fpdb.pyw:836 +#: fpdb.pyw:819 msgid "_Graphs" msgstr "" -#: fpdb.pyw:837 +#: fpdb.pyw:820 msgid "P" msgstr "" -#: fpdb.pyw:837 +#: fpdb.pyw:820 msgid "Ring _Player Stats (tabulated view, not on pgsql)" msgstr "" -#: fpdb.pyw:838 +#: fpdb.pyw:821 msgid "T" msgstr "" -#: fpdb.pyw:838 +#: fpdb.pyw:821 msgid "_Tourney Player Stats (tabulated view, not on pgsql)" msgstr "" -#: fpdb.pyw:839 +#: fpdb.pyw:822 msgid "Tourney _Viewer" msgstr "" -#: fpdb.pyw:840 +#: fpdb.pyw:823 msgid "O" msgstr "" -#: fpdb.pyw:840 +#: fpdb.pyw:823 msgid "P_ositional Stats (tabulated view, not on sqlite)" msgstr "" -#: fpdb.pyw:841 fpdb.pyw:1057 +#: fpdb.pyw:824 fpdb.pyw:1039 msgid "Session Stats" msgstr "" -#: fpdb.pyw:842 +#: fpdb.pyw:825 msgid "_Database" msgstr "" -#: fpdb.pyw:843 +#: fpdb.pyw:826 msgid "_Maintain Databases" msgstr "" -#: fpdb.pyw:844 +#: fpdb.pyw:827 msgid "Create or Recreate _Tables" msgstr "" -#: fpdb.pyw:845 +#: fpdb.pyw:828 msgid "Rebuild HUD Cache" msgstr "" -#: fpdb.pyw:846 +#: fpdb.pyw:829 msgid "Rebuild DB Indexes" msgstr "" -#: fpdb.pyw:847 +#: fpdb.pyw:830 msgid "_Statistics" msgstr "" -#: fpdb.pyw:848 +#: fpdb.pyw:831 msgid "Dump Database to Textfile (takes ALOT of time)" msgstr "" -#: fpdb.pyw:849 +#: fpdb.pyw:832 msgid "_Help" msgstr "" -#: fpdb.pyw:850 +#: fpdb.pyw:833 msgid "_Log Messages" msgstr "" -#: fpdb.pyw:851 +#: fpdb.pyw:834 msgid "A_bout, License, Copying" msgstr "" -#: fpdb.pyw:869 +#: fpdb.pyw:852 msgid "" "There is an error in your config file\n" msgstr "" -#: fpdb.pyw:870 +#: fpdb.pyw:853 msgid "" "\n" "\n" "Error is: " msgstr "" -#: fpdb.pyw:871 +#: fpdb.pyw:854 msgid "CONFIG FILE ERROR" msgstr "" -#: fpdb.pyw:875 +#: fpdb.pyw:858 msgid "" "Logfile is %s\n" msgstr "" -#: fpdb.pyw:877 +#: fpdb.pyw:860 msgid "Config file" msgstr "" -#: fpdb.pyw:878 +#: fpdb.pyw:861 msgid "" "has been created at:\n" "%s.\n" msgstr "" -#: fpdb.pyw:879 -msgid "Edit your screen_name and hand history path in the supported_sites " +#: fpdb.pyw:862 +msgid "Edit your screen_name and hand history path in the supported_sites section of the Preferences window (Main menu) before trying to import hands." msgstr "" -#: fpdb.pyw:880 -msgid "section of the Preferences window (Main menu) before trying to import hands." -msgstr "" - -#: fpdb.pyw:902 +#: fpdb.pyw:884 msgid "Connected to SQLite: %s" msgstr "" -#: fpdb.pyw:906 -msgid "MySQL client reports: 2002 or 2003 error. Unable to connect - " -msgstr "" - -#: fpdb.pyw:907 -msgid "Please check that the MySQL service has been started" -msgstr "" - -#: fpdb.pyw:911 -msgid "Postgres client reports: Unable to connect - " -msgstr "" - -#: fpdb.pyw:912 -msgid "Please check that the Postgres service has been started" -msgstr "" - -#: fpdb.pyw:936 +#: fpdb.pyw:918 msgid "Strong Warning - Invalid database version" msgstr "" -#: fpdb.pyw:938 +#: fpdb.pyw:920 msgid "An invalid DB version or missing tables have been detected." msgstr "" -#: fpdb.pyw:942 +#: fpdb.pyw:924 msgid "This error is not necessarily fatal but it is strongly recommended that you recreate the tables by using the Database menu." msgstr "" -#: fpdb.pyw:946 +#: fpdb.pyw:928 msgid "Not doing this will likely lead to misbehaviour including fpdb crashes, corrupt data etc." msgstr "" -#: fpdb.pyw:959 +#: fpdb.pyw:941 msgid "Status: Connected to %s database named %s on host %s" msgstr "" -#: fpdb.pyw:969 +#: fpdb.pyw:951 msgid "" "\n" -"Global lock taken by" +"Global lock taken by %s" msgstr "" -#: fpdb.pyw:972 +#: fpdb.pyw:954 msgid "" "\n" -"Failed to get global lock, it is currently held by" +"Failed to get global lock, it is currently held by %s" msgstr "" -#: fpdb.pyw:982 +#: fpdb.pyw:964 msgid "Quitting normally" msgstr "" -#: fpdb.pyw:1006 +#: fpdb.pyw:988 msgid "" "Global lock released.\n" msgstr "" -#: fpdb.pyw:1013 +#: fpdb.pyw:995 msgid "Auto Import" msgstr "" -#: fpdb.pyw:1020 +#: fpdb.pyw:1002 msgid "Bulk Import" msgstr "" -#: fpdb.pyw:1026 +#: fpdb.pyw:1008 msgid "eMail Import" msgstr "" -#: fpdb.pyw:1033 +#: fpdb.pyw:1015 msgid "Ring Player Stats" msgstr "" -#: fpdb.pyw:1039 +#: fpdb.pyw:1021 msgid "Tourney Player Stats" msgstr "" -#: fpdb.pyw:1045 +#: fpdb.pyw:1027 msgid "Tourney Viewer" msgstr "" -#: fpdb.pyw:1051 +#: fpdb.pyw:1033 msgid "Positional Stats" msgstr "" -#: fpdb.pyw:1061 +#: fpdb.pyw:1043 msgid "" "Fpdb needs translators!\n" "If you speak another language and have a few minutes or more to spare get in touch by emailing steffen@schaumburger.info\n" @@ -2884,36 +2905,36 @@ msgid "" "You can find the full license texts in agpl-3.0.txt, gpl-2.0.txt, gpl-3.0.txt and mit.txt in the fpdb installation directory." msgstr "" -#: fpdb.pyw:1078 +#: fpdb.pyw:1060 msgid "Help" msgstr "" -#: fpdb.pyw:1085 +#: fpdb.pyw:1067 msgid "Graphs" msgstr "" -#: fpdb.pyw:1137 +#: fpdb.pyw:1119 msgid "" "\n" -"Note: error output is being diverted to fpdb-errors.txt and HUD-errors.txt in:\n" +"Note: error output is being diverted to fpdb-errors.txt and HUD-errors.txt in: %s" msgstr "" -#: fpdb.pyw:1166 +#: fpdb.pyw:1148 msgid "fpdb starting ..." msgstr "" -#: fpdb.pyw:1223 +#: fpdb.pyw:1205 msgid "FPDB WARNING" msgstr "" -#: fpdb.pyw:1242 +#: fpdb.pyw:1224 msgid "" -"WARNING: Unable to find output hh directory %s\n" +"WARNING: Unable to find output hand history directory %s\n" "\n" " Press YES to create this directory, or NO to select a new one." msgstr "" -#: fpdb.pyw:1250 +#: fpdb.pyw:1232 msgid "WARNING: Unable to create hand output directory. Importing is not likely to work until this is fixed." msgstr "" @@ -2934,7 +2955,7 @@ msgid "[ERROR] More than 1 Database ID found for %s - Multiple currencies not im msgstr "" #: fpdb_import.py:227 -msgid "Attempted to add non-directory: '%s' as an import directory" +msgid "Attempted to add non-directory '%s' as an import directory" msgstr "" #: fpdb_import.py:237 @@ -2966,11 +2987,11 @@ msgid "No need to rebuild hudcache." msgstr "" #: fpdb_import.py:313 -msgid "sending finish msg qlen =" +msgid "sending finish message queue length =" msgstr "" #: fpdb_import.py:439 fpdb_import.py:441 -msgid "Converting " +msgid "Converting %s" msgstr "" #: fpdb_import.py:477 diff --git a/pyfpdb/locale/fpdb-hu_HU.po b/pyfpdb/locale/fpdb-hu_HU.po index 5d4b6e45..2c2ea758 100644 --- a/pyfpdb/locale/fpdb-hu_HU.po +++ b/pyfpdb/locale/fpdb-hu_HU.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.20.905 plus git\n" -"POT-Creation-Date: 2010-08-29 14:22+CEST\n" +"POT-Creation-Date: 2010-08-29 20:42+CEST\n" "PO-Revision-Date: 2010-08-29 14:25+0200\n" "Last-Translator: Ferenc Erki \n" "Language-Team: Hungarian \n" @@ -36,19 +36,19 @@ msgstr "re_HandInfo nem illeszkedik" msgid "No bringin found" msgstr "Beülő nem található" -#: BetfairToFpdb.py:206 OnGameToFpdb.py:308 PokerStarsToFpdb.py:440 +#: BetfairToFpdb.py:206 OnGameToFpdb.py:339 PokerStarsToFpdb.py:441 msgid "DEBUG: unimplemented readAction: '%s' '%s'" msgstr "DEBUG: nem ismert readAction: '%s' '%s'" -#: BetfairToFpdb.py:229 PartyPokerToFpdb.py:522 PokerStarsToFpdb.py:467 +#: BetfairToFpdb.py:229 PartyPokerToFpdb.py:525 PokerStarsToFpdb.py:468 msgid "parse input hand history" msgstr "leosztástörténet feldolgozása" -#: BetfairToFpdb.py:230 PartyPokerToFpdb.py:523 PokerStarsToFpdb.py:468 +#: BetfairToFpdb.py:230 PartyPokerToFpdb.py:526 PokerStarsToFpdb.py:469 msgid "output translation to" msgstr "feldolgozás eredményének helye" -#: BetfairToFpdb.py:231 PartyPokerToFpdb.py:524 PokerStarsToFpdb.py:469 +#: BetfairToFpdb.py:231 PartyPokerToFpdb.py:527 PokerStarsToFpdb.py:470 msgid "follow (tail -f) the input" msgstr "kövesse a kimenetet (tail -f)" @@ -64,11 +64,11 @@ msgstr "Nem sikerült konvertálni: \"%s\"\n" msgid "Could not encode: \"%s\"\n" msgstr "Nem sikerült kódolni: \"%s\"\n" -#: Configuration.py:113 Configuration.py:126 +#: Configuration.py:116 Configuration.py:131 msgid "Config file has been created at %s.\n" msgstr "Konfigurációs fájl létrehozva itt: %s.\n" -#: Configuration.py:125 +#: Configuration.py:130 msgid "" "No %s found\n" " in %s\n" @@ -78,27 +78,28 @@ msgstr "" " itt: %s\n" " vagy itt: %s\n" -#: Configuration.py:131 Configuration.py:132 -msgid "Error copying .example file, cannot fall back. Exiting.\n" +#: Configuration.py:135 Configuration.py:136 +#, fuzzy +msgid "Error copying .example config file, cannot fall back. Exiting.\n" msgstr "Hiba a .example fájl másolása közben, nem tudom folytatni. Kilépés.\n" -#: Configuration.py:136 Configuration.py:137 +#: Configuration.py:140 Configuration.py:141 msgid "No %s found, cannot fall back. Exiting.\n" msgstr "%s nem található, nem tudom folytatni. Kilépés.\n" -#: Configuration.py:167 +#: Configuration.py:173 msgid "Default logger initialised for " msgstr "Alapértelmezett naplózó előkészítve ehhez: " -#: Configuration.py:168 +#: Configuration.py:174 msgid "Default logger intialised for " msgstr "Alapértelmezett naplózó előkészítve ehhez: " -#: Configuration.py:179 Database.py:438 Database.py:439 +#: Configuration.py:185 Database.py:438 Database.py:439 msgid "Creating directory: '%s'" msgstr "Könyvtár létrehozása: '%s'" -#: Configuration.py:205 +#: Configuration.py:211 msgid "" "Default encoding set to US-ASCII, defaulting to CP1252 instead -- If you're " "not on a Mac, please report this problem." @@ -106,59 +107,59 @@ msgstr "" "US-ASCII az alapértelmezett karakterkódolás, CP1252 használata ehelyett.Ha " "nem Mac-et használsz, akkor kérlek jelentsd ezt a problémát." -#: Configuration.py:303 +#: Configuration.py:309 msgid "Loading site" msgstr "Terem betöltése" -#: Configuration.py:520 +#: Configuration.py:526 msgid "config.general: adding %s = %s" msgstr "config.general: %s = %s hozzáadása" -#: Configuration.py:567 Configuration.py:568 +#: Configuration.py:573 Configuration.py:574 msgid "bad number in xalignment was ignored" msgstr "hibás érték az xalignment-ben - figyelmen kívül hagyás" -#: Configuration.py:616 +#: Configuration.py:622 msgid "missing config section raw_hands" msgstr "hiányzó konfigurációs bekezdés: raw_hands" -#: Configuration.py:622 +#: Configuration.py:628 msgid "Invalid config value for raw_hands.save, defaulting to \"error\"" msgstr "" "Érvénytelen raw_hands.save beállítás, az alapértelmezett \"error\" használata" -#: Configuration.py:629 +#: Configuration.py:635 msgid "Invalid config value for raw_hands.compression, defaulting to \"none\"" msgstr "" "Érvénytelen raw_hands.compression beállítás, az alapértelmezett \"none\" " "használata" -#: Configuration.py:642 +#: Configuration.py:648 msgid "missing config section raw_tourneys" msgstr "hiányzó konfigurációs bekezdés: raw_tourneys" -#: Configuration.py:648 +#: Configuration.py:654 msgid "Invalid config value for raw_tourneys.save, defaulting to \"error\"" msgstr "" "Érvénytelen raw_tourneys.save beállítás, az alapértelmezett \"error\" " "használata" -#: Configuration.py:655 +#: Configuration.py:661 msgid "" "Invalid config value for raw_tourneys.compression, defaulting to \"none\"" msgstr "" "Érvénytelen raw_tourneys.compression beállítás, az alapértelmezett \"none\" " "használata" -#: Configuration.py:673 Configuration.py:674 +#: Configuration.py:679 Configuration.py:680 msgid "Configuration file %s not found. Using defaults." msgstr "A %s konfigurációs fájl nem található. Alapértelmezések használata." -#: Configuration.py:690 +#: Configuration.py:708 msgid "Reading configuration file %s" msgstr "%s konfigurációs fájl olvasása" -#: Configuration.py:691 +#: Configuration.py:709 msgid "" "\n" "Reading configuration file %s\n" @@ -166,10 +167,15 @@ msgstr "" "\n" "%s konfigurációs fájl olvasása\n" -#: Configuration.py:696 +#: Configuration.py:715 msgid "Error parsing %s. See error log file." msgstr "Hiba a(z) %s értelmezése közben. Nézz bele a hibanaplóba." +#: Configuration.py:831 +#, fuzzy +msgid "Error parsing example file %s. See error log file." +msgstr "Hiba a(z) %s értelmezése közben. Nézz bele a hibanaplóba." + #: Database.py:74 msgid "Not using sqlalchemy connection pool." msgstr "SQLAlchemy connection pool használatának kihagyása." @@ -474,7 +480,7 @@ msgstr "kezdőkéz =" msgid "get_stats took: %4.3f seconds" msgstr "get_stats időigény: %4.3f mp" -#: Database.py:2373 Tables.py:448 +#: Database.py:2373 msgid "press enter to continue" msgstr "nyomj ENTER-t a folytatáshoz" @@ -527,7 +533,8 @@ msgid "Grouping:" msgstr "Csoportosítás:" #: Filters.py:66 -msgid "Show Position Stats:" +#, fuzzy +msgid "Show Position Stats" msgstr "Pozíció" #: Filters.py:67 TourneyFilters.py:60 @@ -602,15 +609,23 @@ msgstr "INFO: nem található játék az adatbázisban" msgid "No games returned from database" msgstr "Nem található játék az adatbázisban" +#: Filters.py:894 +msgid "From:" +msgstr "" + +#: Filters.py:908 +msgid "To:" +msgstr "" + #: Filters.py:913 msgid " Clear Dates " msgstr "Törlés" -#: Filters.py:940 fpdb.pyw:722 +#: Filters.py:940 fpdb.pyw:723 msgid "Pick a date" msgstr "Válassz napot" -#: Filters.py:946 fpdb.pyw:728 +#: Filters.py:946 fpdb.pyw:729 msgid "Done" msgstr "Kész" @@ -619,15 +634,18 @@ msgid "Time between imports in seconds:" msgstr "Importálások közti idő (mp):" #: GuiAutoImport.py:116 GuiAutoImport.py:184 GuiAutoImport.py:261 -msgid " Start _Autoimport " +#, fuzzy +msgid " Start _Auto Import " msgstr " _AutoImport indítása " #: GuiAutoImport.py:135 -msgid "AutoImport Ready." +#, fuzzy +msgid "Auto Import Ready." msgstr "AutoImport kész." #: GuiAutoImport.py:148 -msgid "Please choose the path that you want to auto import" +#, fuzzy +msgid "Please choose the path that you want to Auto Import" msgstr "Válaszd ki a könyvtárat az AutoImporthoz" #: GuiAutoImport.py:171 @@ -635,7 +653,8 @@ msgid " _Auto Import Running " msgstr " _AutoImport fut " #: GuiAutoImport.py:182 -msgid " Stop _Autoimport " +#, fuzzy +msgid " Stop _Auto Import " msgstr " _AutoImport leállítása " #: GuiAutoImport.py:207 @@ -647,7 +666,8 @@ msgstr "" "Globális zárolás OK ... AutoImport elindítva.\n" #: GuiAutoImport.py:209 -msgid " _Stop Autoimport " +#, fuzzy +msgid " _Stop Auto Import " msgstr " _AutoImport leállítása " #: GuiAutoImport.py:225 @@ -663,25 +683,28 @@ msgstr "" "*** GuiAutoImport Hiba a cső nyitásakor: " #: GuiAutoImport.py:249 +#, fuzzy msgid "" "\n" -"auto-import aborted - global lock not available" +"Auto Import aborted - global lock not available" msgstr "" "\n" "AutoImport megszakítva - nem elérhető a globális zárolás" #: GuiAutoImport.py:254 +#, fuzzy msgid "" "\n" -"Stopping autoimport - global lock released." +"Stopping Auto Import - global lock released." msgstr "" "\n" "AutoImport leállítása - globális zárolás feloldva." #: GuiAutoImport.py:256 +#, fuzzy msgid "" "\n" -" * Stop Autoimport: HUD already terminated" +" * Stop Auto Import: HUD already terminated" msgstr "" "\n" " * AutoImport megállítása: A HUD már nem fut" @@ -721,7 +744,8 @@ msgid "Import Complete" msgstr "Importálás kész" #: GuiBulkImport.py:139 -msgid "bulk-import aborted - global lock not available" +#, fuzzy +msgid "bulk import aborted - global lock not available" msgstr "importálás megszakítva - nem elérhető a globális zárolás" #: GuiBulkImport.py:165 @@ -772,7 +796,7 @@ msgstr "Terem:" msgid "Drop HudCache:" msgstr "HUD gyorstár eldobása:" -#: GuiBulkImport.py:297 fpdb.pyw:831 +#: GuiBulkImport.py:297 fpdb.pyw:814 msgid "_Bulk Import" msgstr "_Importálás" @@ -854,112 +878,185 @@ msgid "" "GuiBulkImport done: Stored: %d \tDuplicates: %d \tPartial: %d \tErrors: %d " "in %s seconds - %.0f/sec" msgstr "" -"GuiBulkImport kész: Tárolt: %d \tDuplikáció: %d \tRészleges: %d \tHibák: %d %" -"s másodperc alatt - %.0f/mp" +"GuiBulkImport kész: Tárolt: %d \tDuplikáció: %d \tRészleges: %d \tHibák: %d " +"%s másodperc alatt - %.0f/mp" -#: GuiDatabase.py:106 GuiLogView.py:96 -msgid "Refresh" +#: GuiDatabase.py:117 +msgid "_Add" +msgstr "" + +#: GuiDatabase.py:121 +#, fuzzy +msgid "_Refresh" msgstr "Frissítés" -#: GuiDatabase.py:111 +#: GuiDatabase.py:125 msgid "Type" msgstr "Típus" -#: GuiDatabase.py:112 +#: GuiDatabase.py:126 msgid "Name" msgstr "Név" -#: GuiDatabase.py:113 +#: GuiDatabase.py:127 msgid "Description" msgstr "Leírás" -#: GuiDatabase.py:114 GuiImapFetcher.py:119 +#: GuiDatabase.py:128 GuiDatabase.py:459 GuiImapFetcher.py:119 msgid "Username" msgstr "Felhasználónév" -#: GuiDatabase.py:115 GuiImapFetcher.py:119 +#: GuiDatabase.py:129 GuiDatabase.py:466 GuiImapFetcher.py:119 msgid "Password" msgstr "Jelszó" -#: GuiDatabase.py:116 +#: GuiDatabase.py:130 msgid "Host" msgstr "Kiszolgáló" -#: GuiDatabase.py:117 -msgid "Default" -msgstr "Alapértelmezett" +#: GuiDatabase.py:131 +msgid "Open" +msgstr "" -#: GuiDatabase.py:118 +#: GuiDatabase.py:132 msgid "Status" msgstr "Állapot" -#: GuiDatabase.py:251 +#: GuiDatabase.py:266 msgid "Testing database connections ... " msgstr "Adatbázis-kapcsolatok ellenőrzése ..." -#: GuiDatabase.py:281 -msgid "loaddbs: trying to connect to: %s/%s, %s, %s/%s" +#: GuiDatabase.py:293 +msgid "finished." +msgstr "befejezve." + +#: GuiDatabase.py:303 +#, fuzzy +msgid "loadDbs error: " +msgstr "loaddbs hiba: " + +#: GuiDatabase.py:324 GuiLogView.py:200 GuiTourneyPlayerStats.py:466 +msgid "***sortCols error: " +msgstr "***sortCols hiba: " + +#: GuiDatabase.py:326 +msgid "sortCols error: " +msgstr "sortCols hiba: " + +#: GuiDatabase.py:371 +#, fuzzy +msgid "testDB: trying to connect to: %s/%s, %s, %s/%s" msgstr "loaddbs: kapcolódási próbálkozás: %s/%s, %s, %s/%s" -#: GuiDatabase.py:284 +#: GuiDatabase.py:374 msgid " connected ok" msgstr " kapcsolódás OK" -#: GuiDatabase.py:291 +#: GuiDatabase.py:381 msgid " not connected but no exception" msgstr " nem kapcsolódott, de nem volt hibaüzenet" -#: GuiDatabase.py:293 fpdb.pyw:904 +#: GuiDatabase.py:383 fpdb.pyw:886 msgid "" "MySQL Server reports: Access denied. Are your permissions set correctly?" msgstr "" "MySQL szerver jelenti: A hozzáférés megtagadva. Biztosan megfelelőek a " "jogosultságaid?" -#: GuiDatabase.py:297 -msgid "" -"MySQL client reports: 2002 or 2003 error. Unable to connect - Please check " -"that the MySQL service has been started" +#: GuiDatabase.py:387 fpdb.pyw:888 +msgid "MySQL client reports: 2002 or 2003 error. Unable to connect - " msgstr "" "MySQL kliens jelenti: 2002-es vagy 2003-as hiba. Nem sikerült a kapcsolódás " -"- Kérlek ellenőrizd, hogy a MySQL szolgáltatás el van-e indítva" +"- " -#: GuiDatabase.py:301 fpdb.pyw:909 +#: GuiDatabase.py:388 fpdb.pyw:889 +msgid "Please check that the MySQL service has been started" +msgstr "Kérlek ellenőrizd, hogy a MySQL szolgáltatás el van-e indítva" + +#: GuiDatabase.py:392 fpdb.pyw:891 +#, fuzzy msgid "" -"Postgres Server reports: Access denied. Are your permissions set correctly?" +"PostgreSQL Server reports: Access denied. Are your permissions set correctly?" msgstr "" "Postgres szerver jelenti: A hozzáférés megtagadva. Biztosan megfelelőek a " "jogosultságaid?" -#: GuiDatabase.py:304 -msgid "" -"Postgres client reports: Unable to connect - Please check that the Postgres " -"service has been started" +#: GuiDatabase.py:395 fpdb.pyw:893 +#, fuzzy +msgid "PostgreSQL client reports: Unable to connect - " +msgstr "Postgres kliens jelenti: Nem sikerült a kapcsolódás - " + +#: GuiDatabase.py:396 fpdb.pyw:894 +#, fuzzy +msgid "Please check that the PostgreSQL service has been started" +msgstr "Kérlek ellenőrizd, hogy a Postgres szolgáltatás el van-e indítva" + +#: GuiDatabase.py:406 +#, fuzzy +msgid "db connection to " +msgstr "folytató nyitás %" + +#: GuiDatabase.py:434 +#, fuzzy +msgid "DB Type" +msgstr "Típus" + +#: GuiDatabase.py:444 +#, fuzzy +msgid "DB Name" +msgstr "Név" + +#: GuiDatabase.py:452 +#, fuzzy +msgid "DB Description" +msgstr "Leírás" + +#: GuiDatabase.py:473 +#, fuzzy +msgid "Host Computer" +msgstr "Importálás kész" + +#: GuiDatabase.py:528 +#, fuzzy +msgid "Database created" +msgstr "A_datbázis" + +#: GuiDatabase.py:531 +#, fuzzy +msgid "Database creation failed" +msgstr " index létrehozása nem sikerült: " + +#: GuiDatabase.py:550 +msgid "No Database Name given" msgstr "" -"Postgres kliens jelenti: Nem sikerült a kapcsolódás. .Kérlek ellenőrizd, " -"hogy a Postgres szolgáltatás el van-e indítva" -#: GuiDatabase.py:321 -msgid "finished." -msgstr "befejezve." +#: GuiDatabase.py:553 +msgid "No Database Description given" +msgstr "" -#: GuiDatabase.py:331 -msgid "loaddbs error: " -msgstr "loaddbs hiba: " +#: GuiDatabase.py:556 +#, fuzzy +msgid "No Username given" +msgstr "Felhasználónév" -#: GuiDatabase.py:352 GuiLogView.py:200 GuiTourneyPlayerStats.py:466 -msgid "***sortCols error: " -msgstr "***sortCols hiba: " +#: GuiDatabase.py:559 +#, fuzzy +msgid "No Password given" +msgstr "Jelszó" -#: GuiDatabase.py:354 -msgid "sortCols error: " -msgstr "sortCols hiba: " +#: GuiDatabase.py:562 +msgid "No Host given" +msgstr "" -#: GuiDatabase.py:424 GuiLogView.py:213 +#: GuiDatabase.py:589 +msgid "Do you want to try again?" +msgstr "" + +#: GuiDatabase.py:702 GuiLogView.py:213 msgid "Test Log Viewer" msgstr "Napló böngésző (teszt)" -#: GuiDatabase.py:429 GuiLogView.py:218 +#: GuiDatabase.py:707 GuiLogView.py:218 msgid "Log Viewer" msgstr "Napló böngésző" @@ -1115,6 +1212,10 @@ msgstr "Nem" msgid "Log Messages" msgstr "Naplóbejegyzések" +#: GuiLogView.py:96 +msgid "Refresh" +msgstr "Frissítés" + #: GuiPositionalStats.py:146 msgid "DEBUG: activesite set to %s" msgstr "DEBUG: aktív terem: %s" @@ -1248,7 +1349,7 @@ msgstr "HUD_main indítás: %s adatbázis használata" msgid "Note: error output is being diverted to:\n" msgstr "Megjegyzés: a hibakimenet ide van átirányítva:\n" -#: HUD_main.pyw:96 fpdb.pyw:1138 +#: HUD_main.pyw:96 fpdb.pyw:1120 msgid "" "\n" "Any major error will be reported there _only_.\n" @@ -1306,11 +1407,11 @@ msgstr "\"%s\" nevű asztal már nem létezik\n" #: HUD_main.pyw:321 msgid "" -"HUD_main.read_stdin: hand read in %4.3f seconds (%4.3f,%4.3f,%4.3f,%4.3f,%" -"4.3f,%4.3f)" +"HUD_main.read_stdin: hand read in %4.3f seconds (%4.3f,%4.3f,%4.3f,%4.3f," +"%4.3f,%4.3f)" msgstr "" -"HUD_main.read_stdin: leosztás beolvasva %4.3f mp alatt (%4.3f,%4.3f,%4.3f,%" -"4.3f,%4.3f,%4.3f)" +"HUD_main.read_stdin: leosztás beolvasva %4.3f mp alatt (%4.3f,%4.3f,%4.3f," +"%4.3f,%4.3f,%4.3f)" #: HUD_run_me.py:45 msgid "HUD_main starting\n" @@ -1320,260 +1421,261 @@ msgstr "HUD_main indítás\n" msgid "Using db name = %s\n" msgstr "%s adatbázis használata\n" -#: Hand.py:150 +#: Hand.py:151 msgid "BB" msgstr "BB" -#: Hand.py:151 +#: Hand.py:152 msgid "SB" msgstr "SB" -#: Hand.py:152 +#: Hand.py:153 msgid "BUTTONPOS" msgstr "GOMB" -#: Hand.py:153 +#: Hand.py:154 msgid "HAND NO." msgstr "LEOSZTÁS" -#: Hand.py:154 TourneySummary.py:134 +#: Hand.py:155 TourneySummary.py:134 msgid "SITE" msgstr "TEREM" -#: Hand.py:155 +#: Hand.py:156 msgid "TABLE NAME" msgstr "ASZTAL NEVE" -#: Hand.py:156 TourneySummary.py:144 +#: Hand.py:157 TourneySummary.py:144 msgid "HERO" msgstr "JÁTÉKOS" -#: Hand.py:157 TourneySummary.py:145 +#: Hand.py:158 TourneySummary.py:145 msgid "MAXSEATS" msgstr "MAX. SZÉKEK" -#: Hand.py:158 +#: Hand.py:159 msgid "LEVEL" msgstr "SZINT" -#: Hand.py:159 TourneySummary.py:150 +#: Hand.py:160 TourneySummary.py:150 msgid "MIXED" msgstr "KEVERT" -#: Hand.py:160 +#: Hand.py:161 msgid "LASTBET" msgstr "UTOLSÓ TÉT" -#: Hand.py:161 +#: Hand.py:162 msgid "ACTION STREETS" msgstr "AKCIÓ UTCÁK" -#: Hand.py:162 +#: Hand.py:163 msgid "STREETS" msgstr "UTCÁK" -#: Hand.py:163 +#: Hand.py:164 msgid "ALL STREETS" msgstr "MINDEN UTCA" -#: Hand.py:164 +#: Hand.py:165 msgid "COMMUNITY STREETS" msgstr "KÖZÖS UTCÁK" -#: Hand.py:165 +#: Hand.py:166 msgid "HOLE STREETS" msgstr "HOLE UTCÁK" -#: Hand.py:166 +#: Hand.py:167 msgid "COUNTED SEATS" msgstr "SZÁMOLT SZÉKEK" -#: Hand.py:167 +#: Hand.py:168 msgid "DEALT" msgstr "OSZTOTT" -#: Hand.py:168 +#: Hand.py:169 msgid "SHOWN" msgstr "MUTATOTT" -#: Hand.py:169 +#: Hand.py:170 msgid "MUCKED" msgstr "NEM MUTATOTT" -#: Hand.py:170 +#: Hand.py:171 msgid "TOTAL POT" msgstr "TELJES KASSZA" -#: Hand.py:171 +#: Hand.py:172 msgid "TOTAL COLLECTED" msgstr "TELJES BEGYŰJTÖTT" -#: Hand.py:172 +#: Hand.py:173 msgid "RAKE" msgstr "JUTALÉK" -#: Hand.py:173 TourneySummary.py:135 +#: Hand.py:174 TourneySummary.py:135 msgid "START TIME" msgstr "KEZDÉSI IDŐ" -#: Hand.py:174 +#: Hand.py:175 msgid "TOURNAMENT NO" msgstr "VERSENY SZÁM" -#: Hand.py:175 TourneySummary.py:140 +#: Hand.py:176 TourneySummary.py:140 msgid "TOURNEY ID" msgstr "VERSENYAZONOSÍTÓ" -#: Hand.py:176 TourneySummary.py:139 +#: Hand.py:177 TourneySummary.py:139 msgid "TOURNEY TYPE ID" msgstr "VERSENYTÍPUS AZONOSÍTÓ" -#: Hand.py:177 TourneySummary.py:141 +#: Hand.py:178 TourneySummary.py:141 msgid "BUYIN" msgstr "NEVEZÉSI DÍJ" -#: Hand.py:178 +#: Hand.py:179 msgid "BUYIN CURRENCY" msgstr "NEVEZÉSI DÍJ PÉNZNEME" -#: Hand.py:179 +#: Hand.py:180 msgid "BUYIN CHIPS" msgstr "KEZDŐ ZSETONOK" -#: Hand.py:180 TourneySummary.py:142 +#: Hand.py:181 TourneySummary.py:142 msgid "FEE" msgstr "DÍJ" -#: Hand.py:181 +#: Hand.py:182 msgid "IS REBUY" msgstr "REBUY" -#: Hand.py:182 +#: Hand.py:183 msgid "IS ADDON" msgstr "ADDON" -#: Hand.py:183 +#: Hand.py:184 msgid "IS KO" msgstr "KIÜTÉSES" -#: Hand.py:184 TourneySummary.py:166 +#: Hand.py:185 TourneySummary.py:166 msgid "KO BOUNTY" msgstr "FEJVADÁSZ" -#: Hand.py:185 +#: Hand.py:186 msgid "IS MATRIX" msgstr "MÁTRIX" -#: Hand.py:186 +#: Hand.py:187 msgid "IS SHOOTOUT" msgstr "SHOOTOUT" -#: Hand.py:187 TourneySummary.py:167 +#: Hand.py:188 TourneySummary.py:167 msgid "TOURNEY COMMENT" msgstr "VERSENY MEGJEGYZÉS" -#: Hand.py:190 TourneySummary.py:179 +#: Hand.py:191 TourneySummary.py:179 msgid "PLAYERS" msgstr "JÁTÉKOSOK" -#: Hand.py:191 +#: Hand.py:192 msgid "STACKS" msgstr "LETÉTEK" -#: Hand.py:192 +#: Hand.py:193 msgid "POSTED" msgstr "BETETT" -#: Hand.py:193 +#: Hand.py:194 msgid "POT" msgstr "KASSZA" -#: Hand.py:194 +#: Hand.py:195 msgid "SEATING" msgstr "ÜLTETÉS" -#: Hand.py:195 +#: Hand.py:196 msgid "GAMETYPE" msgstr "JÁTÉKTÍPUS" -#: Hand.py:196 +#: Hand.py:197 msgid "ACTION" msgstr "AKCIÓ" -#: Hand.py:197 +#: Hand.py:198 msgid "COLLECTEES" msgstr "BEGYŰJTŐK" -#: Hand.py:198 +#: Hand.py:199 msgid "BETS" msgstr "TÉTEK" -#: Hand.py:199 +#: Hand.py:200 msgid "BOARD" msgstr "ASZTAL" -#: Hand.py:200 +#: Hand.py:201 msgid "DISCARDS" msgstr "DOBÁSOK" -#: Hand.py:201 +#: Hand.py:202 msgid "HOLECARDS" msgstr "KEZDŐKÉZ" -#: Hand.py:202 +#: Hand.py:203 msgid "TOURNEYS PLAYER IDS" msgstr "VERSENYJÁTÉKOS AZONOSÍTÓK" -#: Hand.py:225 Hand.py:1242 +#: Hand.py:226 Hand.py:1243 msgid "[ERROR] Tried to add holecards for unknown player: %s" msgstr "[ERROR] Kezdőkéz hozzáadása ismeretlen játékoshoz: %s" -#: Hand.py:278 +#: Hand.py:279 msgid "Hand.insert(): hid #: %s is a duplicate" msgstr "Hand.insert(): %s leosztásazonosító duplikáció" -#: Hand.py:317 -msgid "markstreets didn't match - Assuming hand cancelled" +#: Hand.py:318 +#, fuzzy +msgid "markstreets didn't match - Assuming hand %s was cancelled" msgstr "markStreets nem egyezik - Leosztás érvénytelenítését feltételezem" -#: Hand.py:319 +#: Hand.py:320 msgid "FpdbParseError: markStreets appeared to fail: First 100 chars: '%s'" msgstr "" "FpdbParseError: markStreets hívása meghiúsult: az első 100 karakter: '%s'" -#: Hand.py:323 +#: Hand.py:324 msgid "DEBUG: checkPlayerExists %s fail on hand number %s" msgstr "DEBUG: checkPlayerExists %s hiba a következő leosztásban: %s" -#: Hand.py:324 +#: Hand.py:325 msgid "checkPlayerExists: '%s fail on hand number %s" msgstr "checkPlayerExists: '%s hiba a következő leosztásban: %s" -#: Hand.py:405 +#: Hand.py:406 msgid "%s %s calls %s" msgstr "%s utcán %s játékos ennyit megad: %s" -#: Hand.py:475 +#: Hand.py:476 msgid "%s %s raise %s" msgstr "%s utcán %s játékos eddig emel: %s" -#: Hand.py:486 +#: Hand.py:487 msgid "%s %s bets %s" msgstr "%s utcán %s játékos ennyit hív: %s" -#: Hand.py:505 +#: Hand.py:506 msgid "%s %s folds" msgstr "%s utcán %s játékos dob" -#: Hand.py:514 +#: Hand.py:515 msgid "%s %s checks" msgstr "%s utcán %s játékos passzol" -#: Hand.py:534 +#: Hand.py:535 msgid "addShownCards %s hole=%s all=%s" msgstr "addShownCards %s játékos kézben=%s mind=%s" -#: Hand.py:645 +#: Hand.py:646 msgid "" "*** ERROR - HAND: calling writeGameLine with unexpected STARTTIME value, " "expecting datetime.date object, received:" @@ -1581,18 +1683,18 @@ msgstr "" "*** ERROR - HAND: writeGameLine hívása nem várt STARTTIME értékkel, datetime." "date objektumot vár, ezt kapta:" -#: Hand.py:646 +#: Hand.py:647 msgid "" "*** Make sure your HandHistoryConverter is setting hand.startTime properly!" msgstr "" "*** Győződj meg róla, hogy a feldolgozód helyesen állítja be a hand." "startTime értékét!" -#: Hand.py:647 +#: Hand.py:648 msgid "*** Game String:" msgstr "*** Játék sztring:" -#: Hand.py:701 +#: Hand.py:702 msgid "" "*** Parse error reading blinds (check compilePlayerRegexs as a likely " "culprit)" @@ -1600,75 +1702,75 @@ msgstr "" "*** Feldolgozási hiba a vakok beolvasása közben (valószínűleg a " "compilePlayerRegex-eket kell ellenőrizni)" -#: Hand.py:728 +#: Hand.py:729 msgid "HoldemOmahaHand.__init__:Can't assemble hand from db without a handid" msgstr "" "HoldemOmahaHand.__init__: nem lehet a leosztást összeállítani az " "adatbázisból a leosztás azonosítója nélkül" -#: Hand.py:730 +#: Hand.py:731 msgid "HoldemOmahaHand.__init__:Neither HHC nor DB+handid provided" msgstr "" "HoldemOmahaHand.__init__: sem a HHC, sem az adatbázis+leosztásaonosító nem " "lett megadva" -#: Hand.py:1111 +#: Hand.py:1112 msgid "*** DEALING HANDS ***" msgstr "*** OSZTÁS ***" -#: Hand.py:1116 +#: Hand.py:1117 msgid "Dealt to %s: [%s]" msgstr "%s kapja: [%s]" -#: Hand.py:1121 +#: Hand.py:1122 msgid "*** FIRST DRAW ***" msgstr "*** ELSŐ CSERE ***" -#: Hand.py:1131 +#: Hand.py:1132 msgid "*** SECOND DRAW ***" msgstr "*** MÁSODIK CSERE ***" -#: Hand.py:1141 +#: Hand.py:1142 msgid "*** THIRD DRAW ***" msgstr "*** HARMADIK CSERE ***" -#: Hand.py:1151 Hand.py:1369 +#: Hand.py:1152 Hand.py:1370 msgid "*** SHOW DOWN ***" msgstr "*** MUTATÁS ***" -#: Hand.py:1166 Hand.py:1384 +#: Hand.py:1167 Hand.py:1385 msgid "*** SUMMARY ***" msgstr "*** ÖSSZEGZÉS ***" -#: Hand.py:1251 +#: Hand.py:1252 msgid "%s %s completes %s" msgstr "%s utcán %s játékos kiegészít erre: %s" -#: Hand.py:1269 +#: Hand.py:1270 msgid "Bringin: %s, %s" msgstr "Beülő: %s, %s" -#: Hand.py:1309 +#: Hand.py:1310 msgid "*** 3RD STREET ***" msgstr "*** HARMADIK UTCA ***" -#: Hand.py:1323 +#: Hand.py:1324 msgid "*** 4TH STREET ***" msgstr "*** NEGYEDIK UTCA ***" -#: Hand.py:1335 +#: Hand.py:1336 msgid "*** 5TH STREET ***" msgstr "*** ÖTÖDIK UTCA ***" -#: Hand.py:1347 +#: Hand.py:1348 msgid "*** 6TH STREET ***" msgstr "*** HATODIK UTCA ***" -#: Hand.py:1357 +#: Hand.py:1358 msgid "*** RIVER ***" msgstr "*** RIVER ***" -#: Hand.py:1449 +#: Hand.py:1450 msgid "" "join_holecards: # of holecards should be either < 4, 4 or 7 - 5 and 6 should " "be impossible for anyone who is not a hero" @@ -1676,15 +1778,15 @@ msgstr "" "join_holecards: a kézbe kapott lapok száma vagy < 4, 4 or 7 - 5 és 6 " "mindenki számára lehetetlen, aki nem hős" -#: Hand.py:1450 +#: Hand.py:1451 msgid "join_holcards: holecards(%s): %s" msgstr "join_holcards: holecards(%s): %s" -#: Hand.py:1533 +#: Hand.py:1534 msgid "DEBUG: call Pot.end() before printing pot total" msgstr "DEBUG: Pot.end() hívása a teljes kassza kiírása előtt" -#: Hand.py:1535 +#: Hand.py:1536 msgid "FpdbError in printing Hand object" msgstr "FpdbError egy Hand objektum kiírása közben" @@ -1812,99 +1914,99 @@ msgstr "" "Eddig %d leosztást játszottál\n" "a %s teremben." -#: Hud.py:149 +#: Hud.py:148 msgid "Kill This HUD" msgstr "Ezen HUD kilövése" -#: Hud.py:154 +#: Hud.py:153 msgid "Save HUD Layout" msgstr "HUD elrendezés mentése" -#: Hud.py:158 +#: Hud.py:157 msgid "Reposition StatWindows" msgstr "Újrapozícionálás" -#: Hud.py:162 +#: Hud.py:161 msgid "Show Player Stats" msgstr "Játékos statisztikák megjelenítése" -#: Hud.py:167 Hud.py:236 +#: Hud.py:166 Hud.py:235 msgid "For This Blind Level Only" msgstr "Csak erre a vakszintre" -#: Hud.py:172 Hud.py:241 +#: Hud.py:171 Hud.py:240 msgid "For Multiple Blind Levels:" msgstr "Több vakszintre:" -#: Hud.py:175 Hud.py:244 +#: Hud.py:174 Hud.py:243 msgid " 0.5 to 2.0 x Current Blinds" msgstr " A jelenlegi 0.5-2-szerese" -#: Hud.py:180 Hud.py:249 +#: Hud.py:179 Hud.py:248 msgid " 0.33 to 3.0 x Current Blinds" msgstr " A jelenlegi 0.33-3-szorosa" -#: Hud.py:185 Hud.py:254 +#: Hud.py:184 Hud.py:253 msgid " 0.1 to 10 x Current Blinds" msgstr " A jelenlegi 0.1-10-szerese" -#: Hud.py:190 Hud.py:259 +#: Hud.py:189 Hud.py:258 msgid " All Levels" msgstr " Minden limit" -#: Hud.py:195 Hud.py:264 +#: Hud.py:194 Hud.py:263 msgid "For #Seats:" msgstr "Ennyi szék számára:" -#: Hud.py:198 Hud.py:267 +#: Hud.py:197 Hud.py:266 msgid " Any Number" msgstr " Bármennyi" -#: Hud.py:203 Hud.py:272 +#: Hud.py:202 Hud.py:271 msgid " Custom" msgstr " Egyedi" -#: Hud.py:208 Hud.py:277 +#: Hud.py:207 Hud.py:276 msgid " Exact" msgstr " Csak ez" -#: Hud.py:213 Hud.py:282 +#: Hud.py:212 Hud.py:281 msgid "Since:" msgstr "Szűkítés:" -#: Hud.py:216 Hud.py:285 +#: Hud.py:215 Hud.py:284 msgid " All Time" msgstr " Mind" -#: Hud.py:221 Hud.py:290 +#: Hud.py:220 Hud.py:289 msgid " Session" msgstr " Session" -#: Hud.py:226 Hud.py:295 +#: Hud.py:225 Hud.py:294 msgid " %s Days" msgstr " Az elmúlt %s nap" -#: Hud.py:231 +#: Hud.py:230 msgid "Show Opponent Stats" msgstr "Ellenfél statisztikáinak mutatása" -#: Hud.py:353 +#: Hud.py:352 msgid "Debug StatWindows" msgstr "StatWindows debugolása" -#: Hud.py:357 +#: Hud.py:356 msgid "Set max seats" msgstr "Max székek beállítása" -#: Hud.py:543 +#: Hud.py:542 msgid "Updating config file" msgstr "Konfigurációs fájl frissítése" -#: Hud.py:552 +#: Hud.py:551 msgid "No layout found for %d-max games for site %s\n" msgstr "Nem található elrendezés a %d fős asztalok számára a %s teremben\n" -#: Hud.py:566 +#: Hud.py:565 msgid "" "exception in Hud.adj_seats\n" "\n" @@ -1912,15 +2014,15 @@ msgstr "" "hiba a Hud.adj_seats helyen\n" "\n" -#: Hud.py:567 +#: Hud.py:566 msgid "error is %s" msgstr "A hiba a következő: %s" -#: Hud.py:574 +#: Hud.py:573 msgid "Error finding actual seat.\n" msgstr "Hiba az aktuális szék keresése közben.\n" -#: Hud.py:590 +#: Hud.py:589 msgid "" "------------------------------------------------------------\n" "Creating hud from hand %s\n" @@ -1928,7 +2030,7 @@ msgstr "" "------------------------------------------------------------\n" "HUD készítése ebből a leosztásból: %s\n" -#: Hud.py:639 +#: Hud.py:638 msgid "" "KeyError at the start of the for loop in update in hud_main. How this can " "possibly happen is totally beyond my comprehension. Your HUD may be about to " @@ -1937,22 +2039,10 @@ msgstr "" "KeyError a for ciklus kezdeténél a hud_main-ban. Fogalmam sincs, hogy ez " "hogyan lehetséges. A HUD-od valószínűleg nagyon furcsa lesz. -Eric" -#: Hud.py:640 +#: Hud.py:639 msgid "(btw, the key was %s and statd is %s" msgstr "(ja, a kulcs %s volt a statd pedig %s)" -#: Hud.py:947 -msgid "" -"Fake main window, blah blah, blah\n" -"blah, blah" -msgstr "" -"Kamu főablak, bla bla, bla\n" -"bla, bla" - -#: Hud.py:955 -msgid "Table not found." -msgstr "Az asztal nem található." - #: ImapFetcher.py:54 msgid "response to logging in:" msgstr "válasz a bejelentkezésre:" @@ -1965,36 +2055,38 @@ msgstr "IMAP import befejezve, kapcsolat lezárása" msgid "No Name" msgstr "Nincs név" -#: OnGameToFpdb.py:153 PkrToFpdb.py:144 PokerStarsToFpdb.py:189 +#: OnGameToFpdb.py:178 PkrToFpdb.py:144 PokerStarsToFpdb.py:189 msgid "determineGameType: Unable to recognise gametype from: '%s'" msgstr "determineGameType: Nem sikerült felismerni a játéktípust innen: '%s'" -#: OnGameToFpdb.py:154 PkrToFpdb.py:145 PkrToFpdb.py:173 +#: OnGameToFpdb.py:179 OnGameToFpdb.py:193 PkrToFpdb.py:145 PkrToFpdb.py:173 #: PokerStarsToFpdb.py:190 PokerStarsToFpdb.py:220 msgid "determineGameType: Raising FpdbParseError" msgstr "determineGameType: FpdbParseError" -#: OnGameToFpdb.py:155 PkrToFpdb.py:146 PokerStarsToFpdb.py:191 +#: OnGameToFpdb.py:180 PkrToFpdb.py:146 PokerStarsToFpdb.py:191 msgid "Unable to recognise gametype from: '%s'" msgstr "Nem sikerült felismerni a játéktípust innen: '%s'" -#: OnGameToFpdb.py:235 PartyPokerToFpdb.py:351 PokerStarsToFpdb.py:320 +#: OnGameToFpdb.py:192 +#, fuzzy +msgid "determineGameType: limit not found in self.limits(%s). hand: '%s'" +msgstr "determineGameType: Nem sikerült felismerni a játéktípust innen: '%s'" + +#: OnGameToFpdb.py:194 +msgid "limit not found in self.limits(%s). hand: '%s'" +msgstr "" + +#: OnGameToFpdb.py:268 PartyPokerToFpdb.py:351 PokerStarsToFpdb.py:321 msgid "readButton: not found" msgstr "readButton: nem található" -#: OnGameToFpdb.py:250 -msgid "readBlinds starting" -msgstr "readBlinds indítása" - -#: OnGameToFpdb.py:254 -msgid "re_postSB failed, hand=" -msgstr "re_postSB nem sikerült, leosztás=" - -#: OnGameToFpdb.py:257 -msgid "readBlinds in noSB exception" +#: OnGameToFpdb.py:288 +#, fuzzy +msgid "readBlinds in noSB exception - no SB created" msgstr "readBlinds noSB-n belül hiba" -#: OnGameToFpdb.py:265 PokerStarsToFpdb.py:358 +#: OnGameToFpdb.py:296 PokerStarsToFpdb.py:359 msgid "reading antes" msgstr "antek olvasása" @@ -2080,167 +2172,155 @@ msgstr "nem sikerült felismerni a beülő pénznemét ebben:" msgid "in not result starttime" msgstr "a starttime nem található részében" -#: PokerStarsToFpdb.py:273 +#: PokerStarsToFpdb.py:274 msgid "failed to detect currency" msgstr "nem sikerült a pénznem meghatározása" -#: Stats.py:103 -msgid "exception getting stat %s for player %s %s" -msgstr "hiba a %s statisztika számításakor %s játékosnál: %s" - -#: Stats.py:104 -msgid "Stats.do_stat result = %s" -msgstr "Stats.do_stat eredménye = %s" - -#: Stats.py:113 -msgid "error: %s" -msgstr "hiba: %s" - -#: Stats.py:132 Stats.py:133 +#: Stats.py:122 Stats.py:123 msgid "Total Profit" msgstr "teljes profit" -#: Stats.py:154 Stats.py:161 +#: Stats.py:144 Stats.py:151 msgid "Voluntarily Put In Pot Pre-Flop%" msgstr "önként befizet preflop %" -#: Stats.py:174 Stats.py:182 +#: Stats.py:164 Stats.py:172 msgid "Pre-Flop Raise %" msgstr "preflop emelés" -#: Stats.py:195 Stats.py:203 +#: Stats.py:185 Stats.py:193 msgid "% went to showdown" msgstr "terítésig megy %" -#: Stats.py:216 Stats.py:224 +#: Stats.py:206 Stats.py:214 msgid "% won money at showdown" msgstr "pénzt nyer terítéskor %" -#: Stats.py:237 Stats.py:246 +#: Stats.py:227 Stats.py:236 msgid "profit/100hands" msgstr "profit/100 leosztás" -#: Stats.py:240 +#: Stats.py:230 msgid "exception calcing p/100: 100 * %d / %d" msgstr "hiba a p/100 számítása közben: 100 * %d / %d" -#: Stats.py:259 Stats.py:268 +#: Stats.py:249 Stats.py:258 msgid "big blinds/100 hands" msgstr "nagyvak/100 leosztás" -#: Stats.py:281 Stats.py:290 +#: Stats.py:271 Stats.py:280 msgid "Big Bets/100 hands" msgstr "nagytét/100 leosztás" -#: Stats.py:284 +#: Stats.py:274 msgid "exception calcing BB/100: " msgstr "hiba a BB/100 számítása közben: " -#: Stats.py:304 Stats.py:315 +#: Stats.py:294 Stats.py:303 msgid "Flop Seen %" msgstr "flopot néz %" -#: Stats.py:338 Stats.py:346 +#: Stats.py:326 Stats.py:335 msgid "number hands seen" msgstr "látott leosztások száma" -#: Stats.py:359 Stats.py:367 +#: Stats.py:348 Stats.py:356 msgid "folded flop/4th" msgstr "dobott flopon/4. utcán" -#: Stats.py:380 +#: Stats.py:369 msgid "% steal attempted" msgstr "lopási kísérlet %" -#: Stats.py:395 Stats.py:402 +#: Stats.py:384 Stats.py:391 msgid "% folded SB to steal" msgstr "kisvakból dob lopásra %" -#: Stats.py:414 Stats.py:421 +#: Stats.py:403 Stats.py:410 msgid "% folded BB to steal" msgstr "nagyvakból dob lopásra %" -#: Stats.py:436 Stats.py:443 +#: Stats.py:425 Stats.py:432 msgid "% folded blind to steal" msgstr "dob lopásra %" -#: Stats.py:455 Stats.py:462 +#: Stats.py:444 Stats.py:451 msgid "% 3/4 Bet preflop/3rd" msgstr "3/4-bet preflop/3. utcán %" -#: Stats.py:474 Stats.py:481 +#: Stats.py:463 Stats.py:470 msgid "% won$/saw flop/4th" msgstr "$nyer/flopot/4. utcát néz %" -#: Stats.py:493 Stats.py:500 +#: Stats.py:482 Stats.py:489 msgid "Aggression Freq flop/4th" msgstr "agresszió gyakoriság flopon/4. utcán" -#: Stats.py:512 Stats.py:519 +#: Stats.py:501 Stats.py:508 msgid "Aggression Freq turn/5th" msgstr "agresszió gyakoriság turnön/5. utcán" -#: Stats.py:531 Stats.py:538 +#: Stats.py:520 Stats.py:527 msgid "Aggression Freq river/6th" msgstr "agresszió gyakoriság riveren/6. utcán" -#: Stats.py:550 Stats.py:557 +#: Stats.py:539 Stats.py:546 msgid "Aggression Freq 7th" msgstr "agresszió gyakoriság 7. utcán" -#: Stats.py:576 Stats.py:583 +#: Stats.py:565 Stats.py:572 msgid "Post-Flop Aggression Freq" msgstr "postflop agresszió gyakoriság" -#: Stats.py:604 Stats.py:611 +#: Stats.py:593 Stats.py:600 msgid "Aggression Freq" msgstr "agresszió gyakoriság" -#: Stats.py:630 Stats.py:637 +#: Stats.py:619 Stats.py:626 msgid "Aggression Factor" msgstr "agresszió faktor" -#: Stats.py:654 Stats.py:661 +#: Stats.py:643 Stats.py:650 msgid "% continuation bet " msgstr "folytató nyitás %" -#: Stats.py:673 Stats.py:680 +#: Stats.py:662 Stats.py:669 msgid "% continuation bet flop/4th" msgstr "folytató nyitás flopon/4. utcán %" -#: Stats.py:692 Stats.py:699 +#: Stats.py:681 Stats.py:688 msgid "% continuation bet turn/5th" msgstr "folytató nyitás turnön/5. utcán %" -#: Stats.py:711 Stats.py:718 +#: Stats.py:700 Stats.py:707 msgid "% continuation bet river/6th" msgstr "folytató nyitás riveren/6. utcán %" -#: Stats.py:730 Stats.py:737 +#: Stats.py:719 Stats.py:726 msgid "% continuation bet 7th" msgstr "folytató nyitás 7. utcán %" -#: Stats.py:749 Stats.py:756 +#: Stats.py:738 Stats.py:745 msgid "% fold frequency flop/4th" msgstr "dobási gyakoriság flopon/4. utcán %" -#: Stats.py:768 Stats.py:775 +#: Stats.py:757 Stats.py:764 msgid "% fold frequency turn/5th" msgstr "dobási gyakoriság turnön/5. utcán %" -#: Stats.py:787 Stats.py:794 +#: Stats.py:776 Stats.py:783 msgid "% fold frequency river/6th" msgstr "dobási gyakoriság riveren/6. utcán %" -#: Stats.py:806 Stats.py:813 +#: Stats.py:795 Stats.py:802 msgid "% fold frequency 7th" msgstr "dobási gyakoriság 7. utcán %" -#: Stats.py:833 +#: Stats.py:822 msgid "Example stats, player = %s hand = %s:" msgstr "Példa statisztikák, játékos = %s leosztás = %s:" -#: Stats.py:866 +#: Stats.py:855 msgid "" "\n" "\n" @@ -2250,7 +2330,7 @@ msgstr "" "\n" "Érvényes statisztikák:" -#: Stats.py:867 +#: Stats.py:856 msgid "" "(add _0 to name to display with 0 decimal places, _1 to display with 1, " "etc)\n" @@ -2258,14 +2338,6 @@ msgstr "" "(írj a név után _0-t tizedesjegy nélküli megjelenítéshez, _1-et az egy " "tizedesjegyhez, stb.)\n" -#: Tables.py:234 -msgid "Found unknown table = %s" -msgstr "Ismeretlen asztal = %s" - -#: Tables.py:261 -msgid "attach to window" -msgstr "csatolás ezen ablakhoz: " - #: Tables_Demo.py:72 msgid "Fake HUD Main Window" msgstr "Kamu HUD Főablak" @@ -2691,248 +2763,235 @@ msgid "Confirm deleting and recreating tables" msgstr "Erősítsd meg a táblák törlését és újra létrehozását" #: fpdb.pyw:547 -msgid "" -"Please confirm that you want to (re-)create the tables. If there already are " -"tables in the database " +#, fuzzy +msgid "Please confirm that you want to (re-)create the tables." msgstr "" -"Kérlek erősítsd meg, hogy valóban (újra) létre akarod hozni a táblákat. Ha " -"már vannak táblák az adatbázisban (" +"Kérlek erősítsd meg, hogy valóban újra akarod generálni a HUD gyorstárat." #: fpdb.pyw:548 +#, fuzzy msgid "" -" they will be deleted and you will have to re-import your histories.\n" -"This may take a while." +" If there already are tables in the database %s on %s they will be deleted " +"and you will have to re-import your histories.\n" msgstr "" "), akkor azok törölve lesznek, és újra kell importálnod a " "leosztástörténeteket.\n" "Ja, és ez eltarthat egy darabig:)" -#: fpdb.pyw:573 +#: fpdb.pyw:549 +msgid "This may take a while." +msgstr "" + +#: fpdb.pyw:574 msgid "User cancelled recreating tables" msgstr "A felhasználó megszakította a táblák újra létrehozását" -#: fpdb.pyw:580 +#: fpdb.pyw:581 msgid "Please confirm that you want to re-create the HUD cache." msgstr "" "Kérlek erősítsd meg, hogy valóban újra akarod generálni a HUD gyorstárat." -#: fpdb.pyw:588 +#: fpdb.pyw:589 msgid " Hero's cache starts: " msgstr " Saját gyorstár innentől: " -#: fpdb.pyw:602 +#: fpdb.pyw:603 msgid " Villains' cache starts: " msgstr " Ellenfelek gyorstára innentől: " -#: fpdb.pyw:615 +#: fpdb.pyw:616 msgid " Rebuilding HUD Cache ... " msgstr " HUD gyorstár újraépítése ... " -#: fpdb.pyw:623 +#: fpdb.pyw:624 msgid "User cancelled rebuilding hud cache" msgstr "A felhasználó megszakította a HUD gyorstár újraépítését." -#: fpdb.pyw:635 +#: fpdb.pyw:636 msgid "Confirm rebuilding database indexes" msgstr "Erősítsd meg az adatbázis indexeinek újraépítését" -#: fpdb.pyw:636 +#: fpdb.pyw:637 msgid "Please confirm that you want to rebuild the database indexes." msgstr "" "Kérlek erősítsd meg, hogy valóban újra akarod építeni az adatbázis indexeit." -#: fpdb.pyw:644 +#: fpdb.pyw:645 msgid " Rebuilding Indexes ... " msgstr " Indexek újraépítése ... " -#: fpdb.pyw:651 +#: fpdb.pyw:652 msgid " Cleaning Database ... " msgstr " Adatbázis tisztítása ... " -#: fpdb.pyw:656 +#: fpdb.pyw:657 msgid " Analyzing Database ... " msgstr " Adatbázis elemzése ... " -#: fpdb.pyw:661 +#: fpdb.pyw:662 msgid "User cancelled rebuilding db indexes" msgstr "A felhasználó megszakította az adatbázis indexeinek újraépítését." -#: fpdb.pyw:756 +#: fpdb.pyw:757 msgid "" "Unimplemented: Save Profile (try saving a HUD layout, that should do it)" msgstr "" "Még nincs kész: Profil mentése (addig használd a HUD elrendezésének " "mentését, az jó)" -#: fpdb.pyw:759 -msgid "Fatal Error - Config File Missing" -msgstr "Végzetes hiba - Hiányzó konfigurációs fájl" - -#: fpdb.pyw:761 -msgid "Please copy the config file from the docs folder to:" -msgstr "Kérlek másold át a konfigurációs fájlt a docs könyvtárból ide:" - -#: fpdb.pyw:769 -msgid "" -"and edit it according to the install documentation at http://fpdb." -"sourceforge.net" -msgstr "" -"majd szerkeszd a http://fpdb.sourceforge.net címen található telepítési " -"útmutató szerint" - -#: fpdb.pyw:825 +#: fpdb.pyw:808 msgid "_Main" msgstr "Fő_menü" -#: fpdb.pyw:826 fpdb.pyw:853 +#: fpdb.pyw:809 fpdb.pyw:836 msgid "_Quit" msgstr "_Kilépés" -#: fpdb.pyw:827 +#: fpdb.pyw:810 msgid "L" msgstr "L" -#: fpdb.pyw:827 +#: fpdb.pyw:810 msgid "_Load Profile (broken)" msgstr "Profil betö_ltése (hibás)" -#: fpdb.pyw:828 +#: fpdb.pyw:811 msgid "S" msgstr "S" -#: fpdb.pyw:828 +#: fpdb.pyw:811 msgid "_Save Profile (todo)" msgstr "Profil menté_se (todo)" -#: fpdb.pyw:829 +#: fpdb.pyw:812 msgid "F" msgstr "B" -#: fpdb.pyw:829 +#: fpdb.pyw:812 msgid "Pre_ferences" msgstr "_Beállítások" -#: fpdb.pyw:830 +#: fpdb.pyw:813 msgid "_Import" msgstr "_Importálás" -#: fpdb.pyw:831 +#: fpdb.pyw:814 msgid "B" msgstr "I" -#: fpdb.pyw:832 +#: fpdb.pyw:815 msgid "I" msgstr "E" -#: fpdb.pyw:832 +#: fpdb.pyw:815 msgid "_Import through eMail/IMAP" msgstr "_Email import (IMAP)" -#: fpdb.pyw:833 +#: fpdb.pyw:816 msgid "_Viewers" msgstr "_Nézetek" -#: fpdb.pyw:834 +#: fpdb.pyw:817 msgid "A" msgstr "A" -#: fpdb.pyw:834 +#: fpdb.pyw:817 msgid "_Auto Import and HUD" msgstr "_AutoImport és HUD" -#: fpdb.pyw:835 +#: fpdb.pyw:818 msgid "H" msgstr "H" -#: fpdb.pyw:835 +#: fpdb.pyw:818 msgid "_HUD Configurator" msgstr "_HUD beállítása" -#: fpdb.pyw:836 +#: fpdb.pyw:819 msgid "G" msgstr "G" -#: fpdb.pyw:836 +#: fpdb.pyw:819 msgid "_Graphs" msgstr "_Grafikonok" -#: fpdb.pyw:837 +#: fpdb.pyw:820 msgid "P" msgstr "P" -#: fpdb.pyw:837 +#: fpdb.pyw:820 msgid "Ring _Player Stats (tabulated view, not on pgsql)" msgstr "Kész_pénzes statisztikák (táblázat; Postgre-vel nem)" -#: fpdb.pyw:838 +#: fpdb.pyw:821 msgid "T" msgstr "T" -#: fpdb.pyw:838 +#: fpdb.pyw:821 msgid "_Tourney Player Stats (tabulated view, not on pgsql)" msgstr "Versenyjá_tékos statisztikák (táblázat; Postgre-vel nem)" -#: fpdb.pyw:839 +#: fpdb.pyw:822 msgid "Tourney _Viewer" msgstr "_Verseny nézet" -#: fpdb.pyw:840 +#: fpdb.pyw:823 msgid "O" msgstr "O" -#: fpdb.pyw:840 +#: fpdb.pyw:823 msgid "P_ositional Stats (tabulated view, not on sqlite)" msgstr "P_ozíciós statisztikák (táblázat; SQLite-tal nem)" -#: fpdb.pyw:841 fpdb.pyw:1057 +#: fpdb.pyw:824 fpdb.pyw:1039 msgid "Session Stats" msgstr "Session statisztikák" -#: fpdb.pyw:842 +#: fpdb.pyw:825 msgid "_Database" msgstr "A_datbázis" -#: fpdb.pyw:843 +#: fpdb.pyw:826 msgid "_Maintain Databases" msgstr "_Karbantartás" -#: fpdb.pyw:844 +#: fpdb.pyw:827 msgid "Create or Recreate _Tables" msgstr "_Táblák (újra) létrehozása" -#: fpdb.pyw:845 +#: fpdb.pyw:828 msgid "Rebuild HUD Cache" msgstr "HUD gyorstár újraépítése" -#: fpdb.pyw:846 +#: fpdb.pyw:829 msgid "Rebuild DB Indexes" msgstr "Adatbázis indexek újraépítése" -#: fpdb.pyw:847 +#: fpdb.pyw:830 msgid "_Statistics" msgstr "_Statisztikák" -#: fpdb.pyw:848 +#: fpdb.pyw:831 msgid "Dump Database to Textfile (takes ALOT of time)" msgstr "Adatbázis kiírása textfájlba (SOKÁIG tart)" -#: fpdb.pyw:849 +#: fpdb.pyw:832 msgid "_Help" msgstr "_Súgó" -#: fpdb.pyw:850 +#: fpdb.pyw:833 msgid "_Log Messages" msgstr "Nap_lóbejegyzések" -#: fpdb.pyw:851 +#: fpdb.pyw:834 msgid "A_bout, License, Copying" msgstr "_Névjegy, licensz, másolás" -#: fpdb.pyw:869 +#: fpdb.pyw:852 msgid "There is an error in your config file\n" msgstr "Hiba van a konfigurációs fájlodban\n" -#: fpdb.pyw:870 +#: fpdb.pyw:853 msgid "" "\n" "\n" @@ -2942,19 +3001,19 @@ msgstr "" "\n" "A hiba a következő: " -#: fpdb.pyw:871 +#: fpdb.pyw:854 msgid "CONFIG FILE ERROR" msgstr "KONFIGURÁCIÓS FÁJL HIBA" -#: fpdb.pyw:875 +#: fpdb.pyw:858 msgid "Logfile is %s\n" msgstr "A naplófájl: %s\n" -#: fpdb.pyw:877 +#: fpdb.pyw:860 msgid "Config file" msgstr "Konfigurációs fájl" -#: fpdb.pyw:878 +#: fpdb.pyw:861 msgid "" "has been created at:\n" "%s.\n" @@ -2962,50 +3021,28 @@ msgstr "" "létrehozva itt:\n" "%s.\n" -#: fpdb.pyw:879 -msgid "Edit your screen_name and hand history path in the supported_sites " -msgstr "" -"Állítsd be az asztalnál látható nevedet és a leosztástörténetek helyét a " -"támogatott termek" - -#: fpdb.pyw:880 +#: fpdb.pyw:862 +#, fuzzy msgid "" -"section of the Preferences window (Main menu) before trying to import hands." +"Edit your screen_name and hand history path in the supported_sites section " +"of the Preferences window (Main menu) before trying to import hands." msgstr "" "résznél a Beállítások ablakban (Főmenü) mielőtt megpróbálnál leosztásokat " "importálni." -#: fpdb.pyw:902 +#: fpdb.pyw:884 msgid "Connected to SQLite: %s" msgstr "Kapcsolódva az SQLite adatbázishoz: %s" -#: fpdb.pyw:906 -msgid "MySQL client reports: 2002 or 2003 error. Unable to connect - " -msgstr "" -"MySQL kliens jelenti: 2002-es vagy 2003-as hiba. Nem sikerült a kapcsolódás " -"- " - -#: fpdb.pyw:907 -msgid "Please check that the MySQL service has been started" -msgstr "Kérlek ellenőrizd, hogy a MySQL szolgáltatás el van-e indítva" - -#: fpdb.pyw:911 -msgid "Postgres client reports: Unable to connect - " -msgstr "Postgres kliens jelenti: Nem sikerült a kapcsolódás - " - -#: fpdb.pyw:912 -msgid "Please check that the Postgres service has been started" -msgstr "Kérlek ellenőrizd, hogy a Postgres szolgáltatás el van-e indítva" - -#: fpdb.pyw:936 +#: fpdb.pyw:918 msgid "Strong Warning - Invalid database version" msgstr "Nyomatékos figyelmeztetés - Érvénytelen adatbázis verzió" -#: fpdb.pyw:938 +#: fpdb.pyw:920 msgid "An invalid DB version or missing tables have been detected." msgstr "Érvénytelen adatbázis verziót vagy hiányzó táblá(ka)t találtam." -#: fpdb.pyw:942 +#: fpdb.pyw:924 msgid "" "This error is not necessarily fatal but it is strongly recommended that you " "recreate the tables by using the Database menu." @@ -3013,7 +3050,7 @@ msgstr "" "Ez a hiba nem feltétlenül végzetes, de erősen javasolt a táblák " "újragenerálása az Adatbázis menü használatával." -#: fpdb.pyw:946 +#: fpdb.pyw:928 msgid "" "Not doing this will likely lead to misbehaviour including fpdb crashes, " "corrupt data etc." @@ -3022,65 +3059,67 @@ msgstr "" "kiléphet, tönkretehet adatokat, stb." # FIXME: would need a different word ordering in Hungarian -#: fpdb.pyw:959 +#: fpdb.pyw:941 msgid "Status: Connected to %s database named %s on host %s" msgstr "" "Állapot: Kapcsolódva a(z) %s adatbázis-kezelő %s nevű adatbázisához a(z) %s " "kiszolgálón" -#: fpdb.pyw:969 +#: fpdb.pyw:951 +#, fuzzy msgid "" "\n" -"Global lock taken by" +"Global lock taken by %s" msgstr "" "\n" "Globális zárolást végzett:" -#: fpdb.pyw:972 +#: fpdb.pyw:954 +#, fuzzy msgid "" "\n" -"Failed to get global lock, it is currently held by" +"Failed to get global lock, it is currently held by %s" msgstr "" "\n" "Globális zárolás meghiúsult, jelenleg már zárolta:" -#: fpdb.pyw:982 +#: fpdb.pyw:964 msgid "Quitting normally" msgstr "Normál kilépés" -#: fpdb.pyw:1006 +#: fpdb.pyw:988 msgid "Global lock released.\n" msgstr "Globális zárolás feloldva.\n" -#: fpdb.pyw:1013 +#: fpdb.pyw:995 msgid "Auto Import" msgstr "AutoImport" -#: fpdb.pyw:1020 +#: fpdb.pyw:1002 msgid "Bulk Import" msgstr "Importálás" -#: fpdb.pyw:1026 +#: fpdb.pyw:1008 msgid "eMail Import" msgstr "Email import" -#: fpdb.pyw:1033 +#: fpdb.pyw:1015 msgid "Ring Player Stats" msgstr "Készpénzes statisztikák" -#: fpdb.pyw:1039 +#: fpdb.pyw:1021 msgid "Tourney Player Stats" msgstr "Versenystatisztikák" -#: fpdb.pyw:1045 +#: fpdb.pyw:1027 msgid "Tourney Viewer" msgstr "Verseny nézet" -#: fpdb.pyw:1051 +#: fpdb.pyw:1033 msgid "Positional Stats" msgstr "Pozíciós statisztikák" -#: fpdb.pyw:1061 +#: fpdb.pyw:1043 msgid "" "Fpdb needs translators!\n" "If you speak another language and have a few minutes or more to spare get in " @@ -3138,38 +3177,40 @@ msgstr "" "GPL2 vagy újabb licensszel.\n" "A Windows telepítő csomag tartalmaz MIT licensz hatálya alá eső részeket " "is.\n" -"A licenszek szövegét megtalálod az fpdb főkönyvtárában az agpl-3.0.txt, gpl-" -"2.0.txt, gpl-3.0.txt és mit.txt fájlokban." +"A licenszek szövegét megtalálod az fpdb főkönyvtárában az agpl-3.0.txt, " +"gpl-2.0.txt, gpl-3.0.txt és mit.txt fájlokban." -#: fpdb.pyw:1078 +#: fpdb.pyw:1060 msgid "Help" msgstr "Súgó" -#: fpdb.pyw:1085 +#: fpdb.pyw:1067 msgid "Graphs" msgstr "Grafikonok" -#: fpdb.pyw:1137 +#: fpdb.pyw:1119 +#, fuzzy msgid "" "\n" "Note: error output is being diverted to fpdb-errors.txt and HUD-errors.txt " -"in:\n" +"in: %s" msgstr "" "\n" "Megjegyzés: a hibakimenet átirányítva az fpdb-errors.txt és HUD-errors.txt " "fájlokba itt:\n" -#: fpdb.pyw:1166 +#: fpdb.pyw:1148 msgid "fpdb starting ..." msgstr "fpdb indítása ..." -#: fpdb.pyw:1223 +#: fpdb.pyw:1205 msgid "FPDB WARNING" msgstr "FPDB FIGYELMEZTETÉS" -#: fpdb.pyw:1242 +#: fpdb.pyw:1224 +#, fuzzy msgid "" -"WARNING: Unable to find output hh directory %s\n" +"WARNING: Unable to find output hand history directory %s\n" "\n" " Press YES to create this directory, or NO to select a new one." msgstr "" @@ -3178,7 +3219,7 @@ msgstr "" " Kattints az IGEN gombra a könyvtár létrehozásához, vagy a NEM gombra egy " "másik könyvtár választásához." -#: fpdb.pyw:1250 +#: fpdb.pyw:1232 msgid "" "WARNING: Unable to create hand output directory. Importing is not likely to " "work until this is fixed." @@ -3207,7 +3248,8 @@ msgstr "" "pénznem még nem támogatott" #: fpdb_import.py:227 -msgid "Attempted to add non-directory: '%s' as an import directory" +#, fuzzy +msgid "Attempted to add non-directory '%s' as an import directory" msgstr "Nem könyvtár ('%s') megadása importálási könyvtárként" #: fpdb_import.py:237 @@ -3239,11 +3281,13 @@ msgid "No need to rebuild hudcache." msgstr "Nem szükséges a HUD gyorstár újraépítése." #: fpdb_import.py:313 -msgid "sending finish msg qlen =" +#, fuzzy +msgid "sending finish message queue length =" msgstr "befejező üzenet küldése; qlen =" #: fpdb_import.py:439 fpdb_import.py:441 -msgid "Converting " +#, fuzzy +msgid "Converting %s" msgstr "Konvertálás" #: fpdb_import.py:477 @@ -3321,6 +3365,95 @@ msgstr "" "Nem találhatóak a GTK könyvtárak az útvonaladban - telepítsd a GTK-t, vagy " "állítsd be kézzel az útvonalat\n" +#~ msgid "Fatal Error - Config File Missing" +#~ msgstr "Végzetes hiba - Hiányzó konfigurációs fájl" + +#~ msgid "Please copy the config file from the docs folder to:" +#~ msgstr "Kérlek másold át a konfigurációs fájlt a docs könyvtárból ide:" + +#~ msgid "" +#~ "and edit it according to the install documentation at http://fpdb." +#~ "sourceforge.net" +#~ msgstr "" +#~ "majd szerkeszd a http://fpdb.sourceforge.net címen található telepítési " +#~ "útmutató szerint" + +#~ msgid "" +#~ "Please confirm that you want to (re-)create the tables. If there already " +#~ "are tables in the database " +#~ msgstr "" +#~ "Kérlek erősítsd meg, hogy valóban (újra) létre akarod hozni a táblákat. " +#~ "Ha már vannak táblák az adatbázisban (" + +#~ msgid "" +#~ "Postgres Server reports: Access denied. Are your permissions set " +#~ "correctly?" +#~ msgstr "" +#~ "Postgres szerver jelenti: A hozzáférés megtagadva. Biztosan megfelelőek a " +#~ "jogosultságaid?" + +#, fuzzy +#~ msgid "Postgres client reports: Unable to connect - " +#~ msgstr "Postgres kliens jelenti: Nem sikerült a kapcsolódás - " + +#, fuzzy +#~ msgid "Please check that the Postgres service has been started" +#~ msgstr "Kérlek ellenőrizd, hogy a Postgres szolgáltatás el van-e indítva" + +#~ msgid "" +#~ "MySQL client reports: 2002 or 2003 error. Unable to connect - Please " +#~ "check that the MySQL service has been started" +#~ msgstr "" +#~ "MySQL kliens jelenti: 2002-es vagy 2003-as hiba. Nem sikerült a " +#~ "kapcsolódás - Kérlek ellenőrizd, hogy a MySQL szolgáltatás el van-e " +#~ "indítva" + +#~ msgid "" +#~ "Postgres client reports: Unable to connect - Please check that the " +#~ "Postgres service has been started" +#~ msgstr "" +#~ "Postgres kliens jelenti: Nem sikerült a kapcsolódás. .Kérlek ellenőrizd, " +#~ "hogy a Postgres szolgáltatás el van-e indítva" + +#~ msgid "Default" +#~ msgstr "Alapértelmezett" + +#~ msgid "" +#~ "Fake main window, blah blah, blah\n" +#~ "blah, blah" +#~ msgstr "" +#~ "Kamu főablak, bla bla, bla\n" +#~ "bla, bla" + +#~ msgid "Table not found." +#~ msgstr "Az asztal nem található." + +#~ msgid "readBlinds starting" +#~ msgstr "readBlinds indítása" + +#~ msgid "re_postSB failed, hand=" +#~ msgstr "re_postSB nem sikerült, leosztás=" + +#~ msgid "exception getting stat %s for player %s %s" +#~ msgstr "hiba a %s statisztika számításakor %s játékosnál: %s" + +#~ msgid "Stats.do_stat result = %s" +#~ msgstr "Stats.do_stat eredménye = %s" + +#~ msgid "error: %s" +#~ msgstr "hiba: %s" + +#~ msgid "Found unknown table = %s" +#~ msgstr "Ismeretlen asztal = %s" + +#~ msgid "attach to window" +#~ msgstr "csatolás ezen ablakhoz: " + +#~ msgid "Edit your screen_name and hand history path in the supported_sites " +#~ msgstr "" +#~ "Állítsd be az asztalnál látható nevedet és a leosztástörténetek helyét a " +#~ "támogatott termek" + #~ msgid "_Set HandHistory Archive Directory" #~ msgstr "Leo_sztásarchívum könyvtára" diff --git a/pyfpdb/locale/hu/LC_MESSAGES/fpdb.mo b/pyfpdb/locale/hu/LC_MESSAGES/fpdb.mo index 225a4b034c9de3a5e235109041b0d19043fef288..a73df824a2626bf6477eb908db93d0522a0fa3dc 100644 GIT binary patch delta 11462 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 Vled(?71Fsg`1G%cy~jVO{@<-8{VM Date: Sun, 29 Aug 2010 21:10:57 +0200 Subject: [PATCH 39/53] Revert "Revert "gettextify FulltiltToFpdb.py"" This reverts commit a1f079e4479ed7865720c0adc7e4033625943635. --- pyfpdb/FulltiltToFpdb.py | 44 +++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/pyfpdb/FulltiltToFpdb.py b/pyfpdb/FulltiltToFpdb.py index b235ed4d..f94903c5 100755 --- a/pyfpdb/FulltiltToFpdb.py +++ b/pyfpdb/FulltiltToFpdb.py @@ -18,6 +18,18 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ######################################################################## +import locale +lang=locale.getdefaultlocale()[0][0:2] +if lang=="en": + def _(string): return string +else: + import gettext + try: + trans = gettext.translation("fpdb", localedir="locale", languages=[lang]) + trans.install() + except IOError: + def _(string): return string + import logging from HandHistoryConverter import * #import TourneySummary @@ -206,7 +218,7 @@ class Fulltilt(HandHistoryConverter): def readHandInfo(self, hand): m = self.re_HandInfo.search(hand.handText) if m is None: - logging.info("Didn't match re_HandInfo") + logging.info(_("Didn't match re_HandInfo")) logging.info(hand.handText) raise FpdbParseError("No match in readHandInfo.") hand.handid = m.group('HID') @@ -336,7 +348,7 @@ class Fulltilt(HandHistoryConverter): hand.addBlind(a.group('PNAME'), 'small & big blinds', a.group('SBBB')) def readAntes(self, hand): - logging.debug("reading antes") + logging.debug(_("reading antes")) m = self.re_Antes.finditer(hand.handText) for player in m: logging.debug("hand.addAnte(%s,%s)" %(player.group('PNAME'), player.group('ANTE'))) @@ -346,10 +358,10 @@ class Fulltilt(HandHistoryConverter): def readBringIn(self, hand): m = self.re_BringIn.search(hand.handText,re.DOTALL) if m: - logging.debug("Player bringing in: %s for %s" %(m.group('PNAME'), m.group('BRINGIN'))) + logging.debug(_("Player bringing in: %s for %s") %(m.group('PNAME'), m.group('BRINGIN'))) hand.addBringIn(m.group('PNAME'), m.group('BRINGIN')) else: - logging.warning("No bringin found, handid =%s" % hand.handid) + logging.warning(_("No bringin found, handid =%s") % hand.handid) def readButton(self, hand): hand.buttonpos = int(self.re_Button.search(hand.handText).group('BUTTON')) @@ -406,7 +418,7 @@ class Fulltilt(HandHistoryConverter): elif action.group('ATYPE') == ' checks': hand.addCheck( street, action.group('PNAME')) else: - print "FullTilt: DEBUG: unimplemented readAction: '%s' '%s'" %(action.group('PNAME'),action.group('ATYPE'),) + print _("FullTilt: DEBUG: unimplemented readAction: '%s' '%s'") %(action.group('PNAME'),action.group('ATYPE'),) def readShowdownActions(self, hand): @@ -482,7 +494,7 @@ class Fulltilt(HandHistoryConverter): m = self.re_TourneyInfo.search(tourneyText) if not m: - log.info( "determineTourneyType : Parsing NOK" ) + log.info(_("determineTourneyType : Parsing NOK")) return False mg = m.groupdict() #print mg @@ -540,7 +552,7 @@ class Fulltilt(HandHistoryConverter): if mg['TOURNO'] is not None: tourney.tourNo = mg['TOURNO'] else: - log.info( "Unable to get a valid Tournament ID -- File rejected" ) + log.info(_("Unable to get a valid Tournament ID -- File rejected")) return False if tourney.isMatrix: if mg['MATCHNO'] is not None: @@ -571,18 +583,18 @@ class Fulltilt(HandHistoryConverter): tourney.buyin = 100*Decimal(re.sub(u',', u'', "%s" % mg['BUYIN'])) else : if 100*Decimal(re.sub(u',', u'', "%s" % mg['BUYIN'])) != tourney.buyin: - log.error( "Conflict between buyins read in topline (%s) and in BuyIn field (%s)" % (tourney.buyin, 100*Decimal(re.sub(u',', u'', "%s" % mg['BUYIN']))) ) + log.error(_("Conflict between buyins read in topline (%s) and in BuyIn field (%s)") % (tourney.buyin, 100*Decimal(re.sub(u',', u'', "%s" % mg['BUYIN']))) ) tourney.subTourneyBuyin = 100*Decimal(re.sub(u',', u'', "%s" % mg['BUYIN'])) if mg['FEE'] is not None: if tourney.fee is None: tourney.fee = 100*Decimal(re.sub(u',', u'', "%s" % mg['FEE'])) else : if 100*Decimal(re.sub(u',', u'', "%s" % mg['FEE'])) != tourney.fee: - log.error( "Conflict between fees read in topline (%s) and in BuyIn field (%s)" % (tourney.fee, 100*Decimal(re.sub(u',', u'', "%s" % mg['FEE']))) ) + log.error(_("Conflict between fees read in topline (%s) and in BuyIn field (%s)") % (tourney.fee, 100*Decimal(re.sub(u',', u'', "%s" % mg['FEE']))) ) tourney.subTourneyFee = 100*Decimal(re.sub(u',', u'', "%s" % mg['FEE'])) if tourney.buyin is None: - log.info( "Unable to affect a buyin to this tournament : assume it's a freeroll" ) + log.info(_("Unable to affect a buyin to this tournament : assume it's a freeroll")) tourney.buyin = 0 tourney.fee = 0 else: @@ -683,7 +695,7 @@ class Fulltilt(HandHistoryConverter): tourney.addPlayer(rank, a.group('PNAME'), winnings, "USD", 0, 0, 0) #TODO: make it store actual winnings currency else: - print "FullTilt: Player finishing stats unreadable : %s" % a + print (_("FullTilt: Player finishing stats unreadable : %s") % a) # Find Hero n = self.re_TourneyHeroFinishingP.search(playersText) @@ -692,17 +704,17 @@ class Fulltilt(HandHistoryConverter): tourney.hero = heroName # Is this really useful ? if heroName not in tourney.ranks: - print "FullTilt:", heroName, "not found in tourney.ranks ..." + print (_("FullTilt: %s not found in tourney.ranks ...") % heroName) elif (tourney.ranks[heroName] != Decimal(n.group('HERO_FINISHING_POS'))): - print "FullTilt: Bad parsing : finish position incoherent : %s / %s" % (tourney.ranks[heroName], n.group('HERO_FINISHING_POS')) + print (_("FullTilt: Bad parsing : finish position incoherent : %s / %s") % (tourney.ranks[heroName], n.group('HERO_FINISHING_POS'))) return True if __name__ == "__main__": parser = OptionParser() - parser.add_option("-i", "--input", dest="ipath", help="parse input hand history", default="regression-test-files/fulltilt/razz/FT20090223 Danville - $0.50-$1 Ante $0.10 - Limit Razz.txt") - parser.add_option("-o", "--output", dest="opath", help="output translation to", default="-") - parser.add_option("-f", "--follow", dest="follow", help="follow (tail -f) the input", action="store_true", default=False) + parser.add_option("-i", "--input", dest="ipath", help=_("parse input hand history"), default="regression-test-files/fulltilt/razz/FT20090223 Danville - $0.50-$1 Ante $0.10 - Limit Razz.txt") + parser.add_option("-o", "--output", dest="opath", help=_("output translation to"), default="-") + parser.add_option("-f", "--follow", dest="follow", help=_("follow (tail -f) the input"), action="store_true", default=False) parser.add_option("-q", "--quiet", action="store_const", const=logging.CRITICAL, dest="verbosity", default=logging.INFO) parser.add_option("-v", "--verbose", From 21c1e3340520e16bf0e2890fa212f2c050a7b1ec Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 21:17:58 +0200 Subject: [PATCH 40/53] l10n: missed gettextifying a string in betfairtofpdb --- pyfpdb/BetfairToFpdb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyfpdb/BetfairToFpdb.py b/pyfpdb/BetfairToFpdb.py index 07ee2612..5ee3823f 100755 --- a/pyfpdb/BetfairToFpdb.py +++ b/pyfpdb/BetfairToFpdb.py @@ -127,7 +127,7 @@ class Betfair(HandHistoryConverter): #Shouldn't really dip into the Hand object, but i've no idea how to tell the length of iter m if len(hand.players) < 2: - logging.info("readPlayerStacks: Less than 2 players found in a hand") + logging.info(_("readPlayerStacks: Less than 2 players found in a hand")) def markStreets(self, hand): m = re.search(r"\*\* Dealing down cards \*\*(?P.+(?=\*\* Dealing Flop \*\*)|.+)" From 772f124a295c34a0d2663a8d0392bbf0e711967f Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 21:22:34 +0200 Subject: [PATCH 41/53] l10n: gettextify everleaftofpdb --- pyfpdb/EverleafToFpdb.py | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/pyfpdb/EverleafToFpdb.py b/pyfpdb/EverleafToFpdb.py index 8bff1cdd..fdded3f6 100755 --- a/pyfpdb/EverleafToFpdb.py +++ b/pyfpdb/EverleafToFpdb.py @@ -22,6 +22,18 @@ import sys import logging from HandHistoryConverter import * +import locale +lang=locale.getdefaultlocale()[0][0:2] +if lang=="en": + def _(string): return string +else: + import gettext + try: + trans = gettext.translation("fpdb", localedir="locale", languages=[lang]) + trans.install() + except IOError: + def _(string): return string + # Class for converting Everleaf HH format. class Everleaf(HandHistoryConverter): @@ -133,7 +145,7 @@ or None if we fail to get the info """ def readHandInfo(self, hand): m = self.re_HandInfo.search(hand.handText) if(m == None): - logging.info("Didn't match re_HandInfo") + logging.info(_("Didn't match re_HandInfo")) logging.info(hand.handText) return None logging.debug("HID %s, Table %s" % (m.group('HID'), m.group('TABLE'))) @@ -202,7 +214,7 @@ or None if we fail to get the info """ hand.setCommunityCards(street=street, cards=cards) def readAntes(self, hand): - logging.debug("reading antes") + logging.debug(_("reading antes")) m = self.re_Antes.finditer(hand.handText) for player in m: logging.debug("hand.addAnte(%s,%s)" %(player.group('PNAME'), player.group('ANTE'))) @@ -214,14 +226,14 @@ or None if we fail to get the info """ logging.debug("Player bringing in: %s for %s" %(m.group('PNAME'), m.group('BRINGIN'))) hand.addBringIn(m.group('PNAME'), m.group('BRINGIN')) else: - logging.warning("No bringin found.") + logging.warning(_("No bringin found.")) def readBlinds(self, hand): m = self.re_PostSB.search(hand.handText) if m is not None: hand.addBlind(m.group('PNAME'), 'small blind', m.group('SB')) else: - logging.debug("No small blind") + logging.debug(_("No small blind")) hand.addBlind(None, None, None) for a in self.re_PostBB.finditer(hand.handText): hand.addBlind(a.group('PNAME'), 'big blind', a.group('BB')) @@ -249,7 +261,7 @@ or None if we fail to get the info """ def readStudPlayerCards(self, hand, street): # lol. see Plymouth.txt - logging.warning("Everleaf readStudPlayerCards is only a stub.") + logging.warning(_("Everleaf readStudPlayerCards is only a stub.")) #~ if street in ('THIRD', 'FOURTH', 'FIFTH', 'SIXTH'): #~ hand.addPlayerCards(player = player.group('PNAME'), street = street, closed = [], open = []) @@ -272,7 +284,7 @@ or None if we fail to get the info """ elif action.group('ATYPE') == ' complete to': hand.addComplete( street, action.group('PNAME'), action.group('BET')) else: - logging.debug("Unimplemented readAction: %s %s" %(action.group('PNAME'),action.group('ATYPE'),)) + logging.debug(_("Unimplemented readAction: %s %s" %(action.group('PNAME'),action.group('ATYPE'),))) def readShowdownActions(self, hand): @@ -310,9 +322,9 @@ or None if we fail to get the info """ if __name__ == "__main__": parser = OptionParser() - parser.add_option("-i", "--input", dest="ipath", help="parse input hand history", default="-") - parser.add_option("-o", "--output", dest="opath", help="output translation to", default="-") - parser.add_option("-f", "--follow", dest="follow", help="follow (tail -f) the input", action="store_true", default=False) + parser.add_option("-i", "--input", dest="ipath", help=_("parse input hand history"), default="-") + parser.add_option("-o", "--output", dest="opath", help=_("output translation to"), default="-") + parser.add_option("-f", "--follow", dest="follow", help=_("follow (tail -f) the input"), action="store_true", default=False) parser.add_option("-q", "--quiet", action="store_const", const=logging.CRITICAL, dest="verbosity", default=logging.INFO) parser.add_option("-v", "--verbose", From 4cae54a08644055339a7ff5bf1d085cc21fadfcf Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 21:22:46 +0200 Subject: [PATCH 42/53] l10n: another missed gettextify in betfairtofpdb --- pyfpdb/BetfairToFpdb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyfpdb/BetfairToFpdb.py b/pyfpdb/BetfairToFpdb.py index 5ee3823f..ab870a27 100755 --- a/pyfpdb/BetfairToFpdb.py +++ b/pyfpdb/BetfairToFpdb.py @@ -164,7 +164,7 @@ class Betfair(HandHistoryConverter): def readBringIn(self, hand): m = self.re_BringIn.search(hand.handText,re.DOTALL) if m: - logging.debug("Player bringing in: %s for %s" %(m.group('PNAME'), m.group('BRINGIN'))) + logging.debug(_("Player bringing in: %s for %s" %(m.group('PNAME'), m.group('BRINGIN')))) hand.addBringIn(m.group('PNAME'), m.group('BRINGIN')) else: logging.warning(_("No bringin found")) From 62fb2f91867edf1b901d11d4b5893ac0cb546e69 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 21:24:28 +0200 Subject: [PATCH 43/53] l10n: missed a gettextify in everleaftofpdb --- pyfpdb/EverleafToFpdb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyfpdb/EverleafToFpdb.py b/pyfpdb/EverleafToFpdb.py index fdded3f6..1b27c555 100755 --- a/pyfpdb/EverleafToFpdb.py +++ b/pyfpdb/EverleafToFpdb.py @@ -293,7 +293,7 @@ or None if we fail to get the info """ for shows in self.re_ShowdownAction.finditer(hand.handText): cards = shows.group('CARDS') cards = cards.split(', ') - logging.debug("readShowdownActions %s %s" %(cards, shows.group('PNAME'))) + logging.debug(_("readShowdownActions %s %s" %(cards, shows.group('PNAME')))) hand.addShownCards(cards, shows.group('PNAME')) From 3c645b0e431d2781eb7314856fe3a61a268ec548 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 21:29:18 +0200 Subject: [PATCH 44/53] l10n: gettextify carbontofpdb --- pyfpdb/CarbonToFpdb.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pyfpdb/CarbonToFpdb.py b/pyfpdb/CarbonToFpdb.py index 9239ab12..49523ba6 100644 --- a/pyfpdb/CarbonToFpdb.py +++ b/pyfpdb/CarbonToFpdb.py @@ -148,7 +148,7 @@ or None if we fail to get the info """ def readHandInfo(self, hand): m = self.re_HandInfo.search(hand.handText) if m is None: - logging.info("Didn't match re_HandInfo") + logging.info(_("Didn't match re_HandInfo")) logging.info(hand.handText) return None logging.debug("HID %s-%s, Table %s" % (m.group('HID1'), @@ -254,8 +254,8 @@ or None if we fail to get the info """ elif action.group('ATYPE') == 'ALL_IN': hand.addAllIn(street, player, action.group('BET')) else: - logging.debug("Unimplemented readAction: %s %s" - % (action.group('PSEAT'),action.group('ATYPE'),)) + logging.debug(_("Unimplemented readAction: %s %s" + % (action.group('PSEAT'),action.group('ATYPE'),))) def readShowdownActions(self, hand): for shows in self.re_ShowdownAction.finditer(hand.handText): @@ -285,9 +285,9 @@ or None if we fail to get the info """ if __name__ == "__main__": parser = OptionParser() - parser.add_option("-i", "--input", dest="ipath", help="parse input hand history", default="-") - parser.add_option("-o", "--output", dest="opath", help="output translation to", default="-") - parser.add_option("-f", "--follow", dest="follow", help="follow (tail -f) the input", action="store_true", default=False) + parser.add_option("-i", "--input", dest="ipath", help=_("parse input hand history"), default="-") + parser.add_option("-o", "--output", dest="opath", help=_("output translation to"), default="-") + parser.add_option("-f", "--follow", dest="follow", help=_("follow (tail -f) the input"), action="store_true", default=False) parser.add_option("-q", "--quiet", action="store_const", const=logging.CRITICAL, dest="verbosity", default=logging.INFO) parser.add_option("-v", "--verbose", action="store_const", const=logging.INFO, dest="verbosity") parser.add_option("--vv", action="store_const", const=logging.DEBUG, dest="verbosity") From 2eb3d18b86409677512b62c612800b79149c7da9 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 21:31:34 +0200 Subject: [PATCH 45/53] l10n: gettextify AbsoluteToFpdb --- pyfpdb/AbsoluteToFpdb.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/pyfpdb/AbsoluteToFpdb.py b/pyfpdb/AbsoluteToFpdb.py index 31e21764..7cef8c68 100755 --- a/pyfpdb/AbsoluteToFpdb.py +++ b/pyfpdb/AbsoluteToFpdb.py @@ -164,7 +164,7 @@ class Absolute(HandHistoryConverter): def readHandInfo(self, hand): m = self.re_HandInfo.search(hand.handText) if(m == None): - logging.info("Didn't match re_HandInfo") + logging.info(_("Didn't match re_HandInfo")) logging.info(hand.handText) return None logging.debug("HID %s, Table %s" % (m.group('HID'), m.group('TABLE'))) @@ -221,7 +221,7 @@ class Absolute(HandHistoryConverter): hand.setCommunityCards(street=street, cards=cards) def readAntes(self, hand): - logging.debug("reading antes") + logging.debug(_("reading antes")) m = self.re_Antes.finditer(hand.handText) for player in m: logging.debug("hand.addAnte(%s,%s)" %(player.group('PNAME'), player.group('ANTE'))) @@ -230,17 +230,17 @@ class Absolute(HandHistoryConverter): def readBringIn(self, hand): m = self.re_BringIn.search(hand.handText,re.DOTALL) if m: - logging.debug("Player bringing in: %s for %s" %(m.group('PNAME'), m.group('BRINGIN'))) + logging.debug(_("Player bringing in: %s for %s" %(m.group('PNAME'), m.group('BRINGIN')))) hand.addBringIn(m.group('PNAME'), m.group('BRINGIN')) else: - logging.warning("No bringin found.") + logging.warning(_("No bringin found.")) def readBlinds(self, hand): m = self.re_PostSB.search(hand.handText) if m is not None: hand.addBlind(m.group('PNAME'), 'small blind', m.group('SB')) else: - logging.debug("No small blind") + logging.debug(_("No small blind")) hand.addBlind(None, None, None) for a in self.re_PostBB.finditer(hand.handText): hand.addBlind(a.group('PNAME'), 'big blind', a.group('BB')) @@ -267,7 +267,7 @@ class Absolute(HandHistoryConverter): def readStudPlayerCards(self, hand, street): # lol. see Plymouth.txt - logging.warning("Absolute readStudPlayerCards is only a stub.") + logging.warning(_("Absolute readStudPlayerCards is only a stub.")) #~ if street in ('THIRD', 'FOURTH', 'FIFTH', 'SIXTH'): #~ hand.addPlayerCards(player = player.group('PNAME'), street = street, closed = [], open = []) @@ -290,7 +290,7 @@ class Absolute(HandHistoryConverter): elif action.group('ATYPE') == ' complete to': # TODO: not supported yet ? hand.addComplete( street, action.group('PNAME'), action.group('BET')) else: - logging.debug("Unimplemented readAction: %s %s" %(action.group('PNAME'),action.group('ATYPE'),)) + logging.debug(_("Unimplemented readAction: %s %s" %(action.group('PNAME'),action.group('ATYPE'),))) def readShowdownActions(self, hand): @@ -334,9 +334,9 @@ if __name__ == "__main__": config = Configuration.Config(None) parser = OptionParser() - parser.add_option("-i", "--input", dest="ipath", help="parse input hand history", default="-") - parser.add_option("-o", "--output", dest="opath", help="output translation to", default="-") - parser.add_option("-f", "--follow", dest="follow", help="follow (tail -f) the input", action="store_true", default=False) + parser.add_option("-i", "--input", dest="ipath", help=_("parse input hand history"), default="-") + parser.add_option("-o", "--output", dest="opath", help=_("output translation to"), default="-") + parser.add_option("-f", "--follow", dest="follow", help=_("follow (tail -f) the input"), action="store_true", default=False) parser.add_option("-q", "--quiet", action="store_const", const=logging.CRITICAL, dest="verbosity", default=logging.INFO) parser.add_option("-v", "--verbose", From 7a4eeba3c7396c473db4b6e98c39e5381c4eb5be Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 21:33:03 +0200 Subject: [PATCH 46/53] l10n: gettexify Win2dayToFpdb --- pyfpdb/Win2dayToFpdb.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pyfpdb/Win2dayToFpdb.py b/pyfpdb/Win2dayToFpdb.py index dd3d922e..47891f0f 100755 --- a/pyfpdb/Win2dayToFpdb.py +++ b/pyfpdb/Win2dayToFpdb.py @@ -153,7 +153,7 @@ class Win2day(HandHistoryConverter): hand.buttonpos = player[0] break else: - logging.info('readButton: not found') + logging.info(_('readButton: not found')) def readPlayerStacks(self, hand): logging.debug("readPlayerStacks") @@ -194,7 +194,7 @@ class Win2day(HandHistoryConverter): hand.setCommunityCards(street, boardCards) def readAntes(self, hand): - logging.debug("reading antes") + logging.debug(_("reading antes")) m = self.re_Antes.finditer(hand.handText) for player in m: #~ logging.debug("hand.addAnte(%s,%s)" %(player.group('PNAME'), player.group('ANTE'))) @@ -332,7 +332,7 @@ class Win2day(HandHistoryConverter): elif action.group('ATYPE') == 'ACTION_STAND': hand.addStandsPat( street, action.group('PNAME')) else: - print "DEBUG: unimplemented readAction: '%s' '%s'" %(action.group('PNAME'),action.group('ATYPE'),) + print _("DEBUG: unimplemented readAction: '%s' '%s'" %(action.group('PNAME'),action.group('ATYPE'),)) def readShowdownActions(self, hand): @@ -359,9 +359,9 @@ class Win2day(HandHistoryConverter): if __name__ == "__main__": parser = OptionParser() - parser.add_option("-i", "--input", dest="ipath", help="parse input hand history", default="-") - parser.add_option("-o", "--output", dest="opath", help="output translation to", default="-") - parser.add_option("-f", "--follow", dest="follow", help="follow (tail -f) the input", action="store_true", default=False) + parser.add_option("-i", "--input", dest="ipath", help=_("parse input hand history"), default="-") + parser.add_option("-o", "--output", dest="opath", help=_("output translation to"), default="-") + parser.add_option("-f", "--follow", dest="follow", help=_("follow (tail -f) the input"), action="store_true", default=False) parser.add_option("-q", "--quiet", action="store_const", const=logging.CRITICAL, dest="verbosity", default=logging.INFO) parser.add_option("-v", "--verbose", From 717968e8bfeb8d079450a88de168db26fbf57714 Mon Sep 17 00:00:00 2001 From: gimick Date: Sun, 29 Aug 2010 20:55:40 +0100 Subject: [PATCH 47/53] Logging: Relocate info message from hud-errors to hud-log --- pyfpdb/Hud.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyfpdb/Hud.py b/pyfpdb/Hud.py index 99b65c00..8454f433 100644 --- a/pyfpdb/Hud.py +++ b/pyfpdb/Hud.py @@ -586,7 +586,7 @@ class Hud: self.stat_dict = stat_dict self.cards = cards - sys.stderr.write(_("------------------------------------------------------------\nCreating hud from hand %s\n") % hand) + log.info(_('Creating hud from hand ')+str(hand)) adj = self.adj_seats(hand, config) loc = self.config.get_locations(self.table.site, self.max) if loc is None and self.max != 10: From 9a3782c64d9dfc52ad24eea8d81de67ff9104375 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 22:07:58 +0200 Subject: [PATCH 48/53] l10n: last file gettextified: UltimateBetToFpdb --- pyfpdb/UltimateBetToFpdb.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pyfpdb/UltimateBetToFpdb.py b/pyfpdb/UltimateBetToFpdb.py index acf29b06..580244bb 100755 --- a/pyfpdb/UltimateBetToFpdb.py +++ b/pyfpdb/UltimateBetToFpdb.py @@ -39,7 +39,7 @@ in_path (default '-' = sys.stdin) out_path (default '-' = sys.stdout) follow : whether to tail -f the input""" HandHistoryConverter.__init__(self, in_path, out_path, sitename="UltimateBet", follow=follow, index=index) - logging.info("Initialising UltimateBetconverter class") + logging.info(_("Initialising UltimateBetconverter class")) self.filetype = "text" self.codepage = "cp1252" self.siteId = 6 # Needs to match id entry in Sites database @@ -141,7 +141,7 @@ follow : whether to tail -f the input""" if m: hand.buttonpos = int(m.group('BUTTON')) else: - logging.info('readButton: not found') + logging.info(_('readButton: not found')) def readPlayerStacks(self, hand): logging.debug("readPlayerStacks") @@ -180,7 +180,7 @@ follow : whether to tail -f the input""" hand.setCommunityCards(street, m.group('CARDS').split(' ')) def readAntes(self, hand): - logging.debug("reading antes") + logging.debug(_("reading antes")) m = self.re_Antes.finditer(hand.handText) for player in m: #~ logging.debug("hand.addAnte(%s,%s)" %(player.group('PNAME'), player.group('ANTE'))) @@ -290,7 +290,7 @@ follow : whether to tail -f the input""" #elif action.group('ATYPE') == ' stands pat': # hand.addStandsPat( street, action.group('PNAME')) else: - print "DEBUG: unimplemented readAction: '%s' '%s'" %(action.group('PNAME'),action.group('ATYPE'),) + print _("DEBUG: unimplemented readAction: '%s' '%s'" %(action.group('PNAME'),action.group('ATYPE'),)) def readShowdownActions(self, hand): @@ -312,9 +312,9 @@ follow : whether to tail -f the input""" if __name__ == "__main__": parser = OptionParser() - parser.add_option("-i", "--input", dest="ipath", help="parse input hand history", default="regression-test-files/pokerstars/HH20090226 Natalie V - $0.10-$0.20 - HORSE.txt") - parser.add_option("-o", "--output", dest="opath", help="output translation to", default="-") - parser.add_option("-f", "--follow", dest="follow", help="follow (tail -f) the input", action="store_true", default=False) + parser.add_option("-i", "--input", dest="ipath", help=_("parse input hand history"), default="regression-test-files/pokerstars/HH20090226 Natalie V - $0.10-$0.20 - HORSE.txt") + parser.add_option("-o", "--output", dest="opath", help=_("output translation to"), default="-") + parser.add_option("-f", "--follow", dest="follow", help=_("follow (tail -f) the input"), action="store_true", default=False) parser.add_option("-q", "--quiet", action="store_const", const=logging.CRITICAL, dest="verbosity", default=logging.INFO) parser.add_option("-v", "--verbose", From af0aff530d66adb51ce322f10839b4102fd8074e Mon Sep 17 00:00:00 2001 From: steffen123 Date: Sun, 29 Aug 2010 22:09:22 +0200 Subject: [PATCH 49/53] l10n: update pot/po/mo files --- pyfpdb/locale/de/LC_MESSAGES/fpdb.mo | Bin 20424 -> 20424 bytes pyfpdb/locale/fpdb-de_DE.po | 119 +++++++++++++++++++++----- pyfpdb/locale/fpdb-en_GB.pot | 116 ++++++++++++++++++++----- pyfpdb/locale/fpdb-hu_HU.po | 121 ++++++++++++++++++++++----- pyfpdb/locale/hu/LC_MESSAGES/fpdb.mo | Bin 59291 -> 59291 bytes 5 files changed, 297 insertions(+), 59 deletions(-) diff --git a/pyfpdb/locale/de/LC_MESSAGES/fpdb.mo b/pyfpdb/locale/de/LC_MESSAGES/fpdb.mo index ae007611f0d5cdb7fd5668fce4dc3508fb32db9a..5b67149b32a449e4d703768bf8d5603198bc4a95 100644 GIT binary patch delta 19 bcmX>xpYgxpYg\n" "Language-Team: Fpdb\n" @@ -15,6 +15,47 @@ msgstr "" "X-Generator: Virtaal 0.6.1\n" "Generated-By: pygettext.py 1.5\n" +#: AbsoluteToFpdb.py:167 BetfairToFpdb.py:114 CarbonToFpdb.py:151 +#: EverleafToFpdb.py:148 FulltiltToFpdb.py:221 +msgid "Didn't match re_HandInfo" +msgstr "" + +#: AbsoluteToFpdb.py:224 EverleafToFpdb.py:217 FulltiltToFpdb.py:351 +#: OnGameToFpdb.py:296 PokerStarsToFpdb.py:359 UltimateBetToFpdb.py:183 +#: Win2dayToFpdb.py:197 +msgid "reading antes" +msgstr "" + +#: AbsoluteToFpdb.py:236 EverleafToFpdb.py:229 +msgid "No bringin found." +msgstr "" + +#: AbsoluteToFpdb.py:243 EverleafToFpdb.py:236 +msgid "No small blind" +msgstr "" + +#: AbsoluteToFpdb.py:270 +msgid "Absolute readStudPlayerCards is only a stub." +msgstr "" + +#: AbsoluteToFpdb.py:337 BetfairToFpdb.py:229 CarbonToFpdb.py:288 +#: EverleafToFpdb.py:325 FulltiltToFpdb.py:715 PartyPokerToFpdb.py:525 +#: PokerStarsToFpdb.py:468 UltimateBetToFpdb.py:315 Win2dayToFpdb.py:362 +msgid "parse input hand history" +msgstr "" + +#: AbsoluteToFpdb.py:338 BetfairToFpdb.py:230 CarbonToFpdb.py:289 +#: EverleafToFpdb.py:326 FulltiltToFpdb.py:716 PartyPokerToFpdb.py:526 +#: PokerStarsToFpdb.py:469 UltimateBetToFpdb.py:316 Win2dayToFpdb.py:363 +msgid "output translation to" +msgstr "" + +#: AbsoluteToFpdb.py:339 BetfairToFpdb.py:231 CarbonToFpdb.py:290 +#: EverleafToFpdb.py:327 FulltiltToFpdb.py:717 PartyPokerToFpdb.py:527 +#: PokerStarsToFpdb.py:470 UltimateBetToFpdb.py:317 Win2dayToFpdb.py:364 +msgid "follow (tail -f) the input" +msgstr "" + #: Anonymise.py:55 msgid "Could not find file %s" msgstr "Konnte Datei %s nicht finden" @@ -27,8 +68,8 @@ msgstr "" msgid "GameInfo regex did not match" msgstr "" -#: BetfairToFpdb.py:114 -msgid "Didn't match re_HandInfo" +#: BetfairToFpdb.py:130 +msgid "readPlayerStacks: Less than 2 players found in a hand" msgstr "" #: BetfairToFpdb.py:170 @@ -39,18 +80,6 @@ msgstr "" msgid "DEBUG: unimplemented readAction: '%s' '%s'" msgstr "" -#: BetfairToFpdb.py:229 PartyPokerToFpdb.py:525 PokerStarsToFpdb.py:468 -msgid "parse input hand history" -msgstr "" - -#: BetfairToFpdb.py:230 PartyPokerToFpdb.py:526 PokerStarsToFpdb.py:469 -msgid "output translation to" -msgstr "" - -#: BetfairToFpdb.py:231 PartyPokerToFpdb.py:527 PokerStarsToFpdb.py:470 -msgid "follow (tail -f) the input" -msgstr "" - #: Card.py:167 msgid "fpdb card encoding(same as pokersource)" msgstr "" @@ -76,7 +105,8 @@ msgstr "" #: Configuration.py:135 Configuration.py:136 msgid "Error copying .example config file, cannot fall back. Exiting.\n" -msgstr "Fehler beim Kopieren der .example Konfigurationsdatei, Fallback " +msgstr "" +"Fehler beim Kopieren der .example Konfigurationsdatei, Fallback " "fehlgeschlagen. Beende fpdb.\n" #: Configuration.py:140 Configuration.py:141 @@ -459,6 +489,10 @@ msgstr "" msgid "press enter to continue" msgstr "" +#: EverleafToFpdb.py:264 +msgid "Everleaf readStudPlayerCards is only a stub." +msgstr "" + #: Filters.py:62 msgid "All" msgstr "Alle" @@ -603,6 +637,50 @@ msgstr "Wählen Sie ein Datum" msgid "Done" msgstr "Fertig" +#: FulltiltToFpdb.py:361 +msgid "Player bringing in: %s for %s" +msgstr "" + +#: FulltiltToFpdb.py:364 +msgid "No bringin found, handid =%s" +msgstr "" + +#: FulltiltToFpdb.py:421 +msgid "FullTilt: DEBUG: unimplemented readAction: '%s' '%s'" +msgstr "" + +#: FulltiltToFpdb.py:497 +msgid "determineTourneyType : Parsing NOK" +msgstr "" + +#: FulltiltToFpdb.py:555 +msgid "Unable to get a valid Tournament ID -- File rejected" +msgstr "" + +#: FulltiltToFpdb.py:586 +msgid "Conflict between buyins read in topline (%s) and in BuyIn field (%s)" +msgstr "" + +#: FulltiltToFpdb.py:593 +msgid "Conflict between fees read in topline (%s) and in BuyIn field (%s)" +msgstr "" + +#: FulltiltToFpdb.py:597 +msgid "Unable to affect a buyin to this tournament : assume it's a freeroll" +msgstr "" + +#: FulltiltToFpdb.py:698 +msgid "FullTilt: Player finishing stats unreadable : %s" +msgstr "" + +#: FulltiltToFpdb.py:707 +msgid "FullTilt: %s not found in tourney.ranks ..." +msgstr "" + +#: FulltiltToFpdb.py:709 +msgid "FullTilt: Bad parsing : finish position incoherent : %s / %s" +msgstr "" + #: GuiAutoImport.py:85 msgid "Time between imports in seconds:" msgstr "Zeit zwischen Imports in Sekunden:" @@ -1968,6 +2046,7 @@ msgid "limit not found in self.limits(%s). hand: '%s'" msgstr "" #: OnGameToFpdb.py:268 PartyPokerToFpdb.py:351 PokerStarsToFpdb.py:321 +#: UltimateBetToFpdb.py:144 Win2dayToFpdb.py:156 msgid "readButton: not found" msgstr "" @@ -1975,10 +2054,6 @@ msgstr "" msgid "readBlinds in noSB exception - no SB created" msgstr "" -#: OnGameToFpdb.py:296 PokerStarsToFpdb.py:359 -msgid "reading antes" -msgstr "" - #: Options.py:40 msgid "If passed error output will go to the console rather than ." msgstr "" @@ -2467,6 +2542,10 @@ msgstr "" msgid "incrementPlayerWinnings: name : '%s' - Add Winnings (%s)" msgstr "" +#: UltimateBetToFpdb.py:42 +msgid "Initialising UltimateBetconverter class" +msgstr "" + #: WinTables.py:82 msgid "Window %s not found. Skipping." msgstr "" diff --git a/pyfpdb/locale/fpdb-en_GB.pot b/pyfpdb/locale/fpdb-en_GB.pot index ba73641a..71ec500e 100644 --- a/pyfpdb/locale/fpdb-en_GB.pot +++ b/pyfpdb/locale/fpdb-en_GB.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2010-08-29 20:45+CEST\n" +"POT-Creation-Date: 2010-08-29 22:08+CEST\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -15,6 +15,47 @@ msgstr "" "Generated-By: pygettext.py 1.5\n" +#: AbsoluteToFpdb.py:167 BetfairToFpdb.py:114 CarbonToFpdb.py:151 +#: EverleafToFpdb.py:148 FulltiltToFpdb.py:221 +msgid "Didn't match re_HandInfo" +msgstr "" + +#: AbsoluteToFpdb.py:224 EverleafToFpdb.py:217 FulltiltToFpdb.py:351 +#: OnGameToFpdb.py:296 PokerStarsToFpdb.py:359 UltimateBetToFpdb.py:183 +#: Win2dayToFpdb.py:197 +msgid "reading antes" +msgstr "" + +#: AbsoluteToFpdb.py:236 EverleafToFpdb.py:229 +msgid "No bringin found." +msgstr "" + +#: AbsoluteToFpdb.py:243 EverleafToFpdb.py:236 +msgid "No small blind" +msgstr "" + +#: AbsoluteToFpdb.py:270 +msgid "Absolute readStudPlayerCards is only a stub." +msgstr "" + +#: AbsoluteToFpdb.py:337 BetfairToFpdb.py:229 CarbonToFpdb.py:288 +#: EverleafToFpdb.py:325 FulltiltToFpdb.py:715 PartyPokerToFpdb.py:525 +#: PokerStarsToFpdb.py:468 UltimateBetToFpdb.py:315 Win2dayToFpdb.py:362 +msgid "parse input hand history" +msgstr "" + +#: AbsoluteToFpdb.py:338 BetfairToFpdb.py:230 CarbonToFpdb.py:289 +#: EverleafToFpdb.py:326 FulltiltToFpdb.py:716 PartyPokerToFpdb.py:526 +#: PokerStarsToFpdb.py:469 UltimateBetToFpdb.py:316 Win2dayToFpdb.py:363 +msgid "output translation to" +msgstr "" + +#: AbsoluteToFpdb.py:339 BetfairToFpdb.py:231 CarbonToFpdb.py:290 +#: EverleafToFpdb.py:327 FulltiltToFpdb.py:717 PartyPokerToFpdb.py:527 +#: PokerStarsToFpdb.py:470 UltimateBetToFpdb.py:317 Win2dayToFpdb.py:364 +msgid "follow (tail -f) the input" +msgstr "" + #: Anonymise.py:55 msgid "Could not find file %s" msgstr "" @@ -27,8 +68,8 @@ msgstr "" msgid "GameInfo regex did not match" msgstr "" -#: BetfairToFpdb.py:114 -msgid "Didn't match re_HandInfo" +#: BetfairToFpdb.py:130 +msgid "readPlayerStacks: Less than 2 players found in a hand" msgstr "" #: BetfairToFpdb.py:170 @@ -39,18 +80,6 @@ msgstr "" msgid "DEBUG: unimplemented readAction: '%s' '%s'" msgstr "" -#: BetfairToFpdb.py:229 PartyPokerToFpdb.py:525 PokerStarsToFpdb.py:468 -msgid "parse input hand history" -msgstr "" - -#: BetfairToFpdb.py:230 PartyPokerToFpdb.py:526 PokerStarsToFpdb.py:469 -msgid "output translation to" -msgstr "" - -#: BetfairToFpdb.py:231 PartyPokerToFpdb.py:527 PokerStarsToFpdb.py:470 -msgid "follow (tail -f) the input" -msgstr "" - #: Card.py:167 msgid "fpdb card encoding(same as pokersource)" msgstr "" @@ -457,6 +486,10 @@ msgstr "" msgid "press enter to continue" msgstr "" +#: EverleafToFpdb.py:264 +msgid "Everleaf readStudPlayerCards is only a stub." +msgstr "" + #: Filters.py:62 msgid "All" msgstr "" @@ -601,6 +634,50 @@ msgstr "" msgid "Done" msgstr "" +#: FulltiltToFpdb.py:361 +msgid "Player bringing in: %s for %s" +msgstr "" + +#: FulltiltToFpdb.py:364 +msgid "No bringin found, handid =%s" +msgstr "" + +#: FulltiltToFpdb.py:421 +msgid "FullTilt: DEBUG: unimplemented readAction: '%s' '%s'" +msgstr "" + +#: FulltiltToFpdb.py:497 +msgid "determineTourneyType : Parsing NOK" +msgstr "" + +#: FulltiltToFpdb.py:555 +msgid "Unable to get a valid Tournament ID -- File rejected" +msgstr "" + +#: FulltiltToFpdb.py:586 +msgid "Conflict between buyins read in topline (%s) and in BuyIn field (%s)" +msgstr "" + +#: FulltiltToFpdb.py:593 +msgid "Conflict between fees read in topline (%s) and in BuyIn field (%s)" +msgstr "" + +#: FulltiltToFpdb.py:597 +msgid "Unable to affect a buyin to this tournament : assume it's a freeroll" +msgstr "" + +#: FulltiltToFpdb.py:698 +msgid "FullTilt: Player finishing stats unreadable : %s" +msgstr "" + +#: FulltiltToFpdb.py:707 +msgid "FullTilt: %s not found in tourney.ranks ..." +msgstr "" + +#: FulltiltToFpdb.py:709 +msgid "FullTilt: Bad parsing : finish position incoherent : %s / %s" +msgstr "" + #: GuiAutoImport.py:85 msgid "Time between imports in seconds:" msgstr "" @@ -1929,6 +2006,7 @@ msgid "limit not found in self.limits(%s). hand: '%s'" msgstr "" #: OnGameToFpdb.py:268 PartyPokerToFpdb.py:351 PokerStarsToFpdb.py:321 +#: UltimateBetToFpdb.py:144 Win2dayToFpdb.py:156 msgid "readButton: not found" msgstr "" @@ -1936,10 +2014,6 @@ msgstr "" msgid "readBlinds in noSB exception - no SB created" msgstr "" -#: OnGameToFpdb.py:296 PokerStarsToFpdb.py:359 -msgid "reading antes" -msgstr "" - #: Options.py:40 msgid "If passed error output will go to the console rather than ." msgstr "" @@ -2428,6 +2502,10 @@ msgstr "" msgid "incrementPlayerWinnings: name : '%s' - Add Winnings (%s)" msgstr "" +#: UltimateBetToFpdb.py:42 +msgid "Initialising UltimateBetconverter class" +msgstr "" + #: WinTables.py:82 msgid "Window %s not found. Skipping." msgstr "" diff --git a/pyfpdb/locale/fpdb-hu_HU.po b/pyfpdb/locale/fpdb-hu_HU.po index 2c2ea758..bc8be173 100644 --- a/pyfpdb/locale/fpdb-hu_HU.po +++ b/pyfpdb/locale/fpdb-hu_HU.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.20.905 plus git\n" -"POT-Creation-Date: 2010-08-29 20:42+CEST\n" +"POT-Creation-Date: 2010-08-29 22:08+CEST\n" "PO-Revision-Date: 2010-08-29 14:25+0200\n" "Last-Translator: Ferenc Erki \n" "Language-Team: Hungarian \n" @@ -16,6 +16,48 @@ msgstr "" "Generated-By: pygettext.py 1.5\n" "Plural-Forms: nplurals=2; plural=n !=1;\n" +#: AbsoluteToFpdb.py:167 BetfairToFpdb.py:114 CarbonToFpdb.py:151 +#: EverleafToFpdb.py:148 FulltiltToFpdb.py:221 +msgid "Didn't match re_HandInfo" +msgstr "re_HandInfo nem illeszkedik" + +#: AbsoluteToFpdb.py:224 EverleafToFpdb.py:217 FulltiltToFpdb.py:351 +#: OnGameToFpdb.py:296 PokerStarsToFpdb.py:359 UltimateBetToFpdb.py:183 +#: Win2dayToFpdb.py:197 +msgid "reading antes" +msgstr "antek olvasása" + +#: AbsoluteToFpdb.py:236 EverleafToFpdb.py:229 +#, fuzzy +msgid "No bringin found." +msgstr "Beülő nem található" + +#: AbsoluteToFpdb.py:243 EverleafToFpdb.py:236 +msgid "No small blind" +msgstr "" + +#: AbsoluteToFpdb.py:270 +msgid "Absolute readStudPlayerCards is only a stub." +msgstr "" + +#: AbsoluteToFpdb.py:337 BetfairToFpdb.py:229 CarbonToFpdb.py:288 +#: EverleafToFpdb.py:325 FulltiltToFpdb.py:715 PartyPokerToFpdb.py:525 +#: PokerStarsToFpdb.py:468 UltimateBetToFpdb.py:315 Win2dayToFpdb.py:362 +msgid "parse input hand history" +msgstr "leosztástörténet feldolgozása" + +#: AbsoluteToFpdb.py:338 BetfairToFpdb.py:230 CarbonToFpdb.py:289 +#: EverleafToFpdb.py:326 FulltiltToFpdb.py:716 PartyPokerToFpdb.py:526 +#: PokerStarsToFpdb.py:469 UltimateBetToFpdb.py:316 Win2dayToFpdb.py:363 +msgid "output translation to" +msgstr "feldolgozás eredményének helye" + +#: AbsoluteToFpdb.py:339 BetfairToFpdb.py:231 CarbonToFpdb.py:290 +#: EverleafToFpdb.py:327 FulltiltToFpdb.py:717 PartyPokerToFpdb.py:527 +#: PokerStarsToFpdb.py:470 UltimateBetToFpdb.py:317 Win2dayToFpdb.py:364 +msgid "follow (tail -f) the input" +msgstr "kövesse a kimenetet (tail -f)" + #: Anonymise.py:55 msgid "Could not find file %s" msgstr "%s fájl nem található" @@ -28,9 +70,9 @@ msgstr "Az eredmény ide került kiírásra" msgid "GameInfo regex did not match" msgstr "GameInfo regex nem illeszkedik" -#: BetfairToFpdb.py:114 -msgid "Didn't match re_HandInfo" -msgstr "re_HandInfo nem illeszkedik" +#: BetfairToFpdb.py:130 +msgid "readPlayerStacks: Less than 2 players found in a hand" +msgstr "" #: BetfairToFpdb.py:170 msgid "No bringin found" @@ -40,18 +82,6 @@ msgstr "Beülő nem található" msgid "DEBUG: unimplemented readAction: '%s' '%s'" msgstr "DEBUG: nem ismert readAction: '%s' '%s'" -#: BetfairToFpdb.py:229 PartyPokerToFpdb.py:525 PokerStarsToFpdb.py:468 -msgid "parse input hand history" -msgstr "leosztástörténet feldolgozása" - -#: BetfairToFpdb.py:230 PartyPokerToFpdb.py:526 PokerStarsToFpdb.py:469 -msgid "output translation to" -msgstr "feldolgozás eredményének helye" - -#: BetfairToFpdb.py:231 PartyPokerToFpdb.py:527 PokerStarsToFpdb.py:470 -msgid "follow (tail -f) the input" -msgstr "kövesse a kimenetet (tail -f)" - #: Card.py:167 msgid "fpdb card encoding(same as pokersource)" msgstr "fpdb kártyakódolás (ugyanaz, mint amit a pokersource használ)" @@ -484,6 +514,10 @@ msgstr "get_stats időigény: %4.3f mp" msgid "press enter to continue" msgstr "nyomj ENTER-t a folytatáshoz" +#: EverleafToFpdb.py:264 +msgid "Everleaf readStudPlayerCards is only a stub." +msgstr "" + #: Filters.py:62 msgid "All" msgstr "Mind" @@ -629,6 +663,52 @@ msgstr "Válassz napot" msgid "Done" msgstr "Kész" +#: FulltiltToFpdb.py:361 +msgid "Player bringing in: %s for %s" +msgstr "" + +#: FulltiltToFpdb.py:364 +#, fuzzy +msgid "No bringin found, handid =%s" +msgstr "Beülő nem található" + +#: FulltiltToFpdb.py:421 +#, fuzzy +msgid "FullTilt: DEBUG: unimplemented readAction: '%s' '%s'" +msgstr "DEBUG: nem ismert readAction: '%s' '%s'" + +#: FulltiltToFpdb.py:497 +msgid "determineTourneyType : Parsing NOK" +msgstr "" + +#: FulltiltToFpdb.py:555 +msgid "Unable to get a valid Tournament ID -- File rejected" +msgstr "" + +#: FulltiltToFpdb.py:586 +msgid "Conflict between buyins read in topline (%s) and in BuyIn field (%s)" +msgstr "" + +#: FulltiltToFpdb.py:593 +msgid "Conflict between fees read in topline (%s) and in BuyIn field (%s)" +msgstr "" + +#: FulltiltToFpdb.py:597 +msgid "Unable to affect a buyin to this tournament : assume it's a freeroll" +msgstr "" + +#: FulltiltToFpdb.py:698 +msgid "FullTilt: Player finishing stats unreadable : %s" +msgstr "" + +#: FulltiltToFpdb.py:707 +msgid "FullTilt: %s not found in tourney.ranks ..." +msgstr "" + +#: FulltiltToFpdb.py:709 +msgid "FullTilt: Bad parsing : finish position incoherent : %s / %s" +msgstr "" + #: GuiAutoImport.py:85 msgid "Time between imports in seconds:" msgstr "Importálások közti idő (mp):" @@ -2078,6 +2158,7 @@ msgid "limit not found in self.limits(%s). hand: '%s'" msgstr "" #: OnGameToFpdb.py:268 PartyPokerToFpdb.py:351 PokerStarsToFpdb.py:321 +#: UltimateBetToFpdb.py:144 Win2dayToFpdb.py:156 msgid "readButton: not found" msgstr "readButton: nem található" @@ -2086,10 +2167,6 @@ msgstr "readButton: nem található" msgid "readBlinds in noSB exception - no SB created" msgstr "readBlinds noSB-n belül hiba" -#: OnGameToFpdb.py:296 PokerStarsToFpdb.py:359 -msgid "reading antes" -msgstr "antek olvasása" - #: Options.py:40 msgid "If passed error output will go to the console rather than ." msgstr "Ha be van állítva, akkor a hibakimenet a konzolra lesz irányítva." @@ -2586,6 +2663,10 @@ msgstr "addPlayer: helyezés:%s - név : '%s' - Nyeremény (%s)" msgid "incrementPlayerWinnings: name : '%s' - Add Winnings (%s)" msgstr "incrementPlayerWinnings: név : '%s' - plusz nyeremény (%s)" +#: UltimateBetToFpdb.py:42 +msgid "Initialising UltimateBetconverter class" +msgstr "" + #: WinTables.py:82 msgid "Window %s not found. Skipping." msgstr "A(z) %s nevű ablak nincs meg. Kihagyás." diff --git a/pyfpdb/locale/hu/LC_MESSAGES/fpdb.mo b/pyfpdb/locale/hu/LC_MESSAGES/fpdb.mo index a73df824a2626bf6477eb908db93d0522a0fa3dc..2c4ea94ad6821a6a58ae76a1be9d08ba23e49357 100644 GIT binary patch delta 19 bcmbPzo_Y3p<_+g+S&Xa Date: Mon, 30 Aug 2010 01:19:23 +0200 Subject: [PATCH 50/53] l10n: add missing gettextifications in GuiDatabase --- pyfpdb/GuiDatabase.py | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/pyfpdb/GuiDatabase.py b/pyfpdb/GuiDatabase.py index e85e3057..d6eaf14f 100755 --- a/pyfpdb/GuiDatabase.py +++ b/pyfpdb/GuiDatabase.py @@ -403,8 +403,7 @@ class GuiDatabase: status = "failed" icon = gtk.STOCK_CANCEL if err_msg: - log.info( _('db connection to ') + str(dbms_num)+','+host+','+name+','+user+','+passwd+' failed: ' - + err_msg ) + log.info( _('db connection to %s, %s, %s, %s, %s failed: %s') % (str(dbms_num), host, name, user, passwd, err_msg)) return( status, err_msg, icon ) @@ -412,7 +411,7 @@ class GuiDatabase: class AddDB(gtk.Dialog): def __init__(self, config, parent): - log.debug("AddDB starting") + log.debug(_("AddDB starting")) self.dbnames = { 'Sqlite' : Configuration.DATABASE_TYPE_SQLITE , 'MySQL' : Configuration.DATABASE_TYPE_MYSQL , 'PostgreSQL' : Configuration.DATABASE_TYPE_POSTGRESQL @@ -421,7 +420,7 @@ class AddDB(gtk.Dialog): # create dialog and add icon and label super(AddDB,self).__init__( parent=parent , flags=gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT - , title="Add New Database" + , title=_("Add New Database") , buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT ,gtk.STOCK_SAVE, gtk.RESPONSE_ACCEPT) ) # , buttons=btns @@ -489,7 +488,7 @@ class AddDB(gtk.Dialog): def run(self): response = super(AddDB,self).run() - log.debug("adddb.run: response is "+str(response)+" accept is "+str(int(gtk.RESPONSE_ACCEPT))) + log.debug(_("addDB.run: response is %s accept is %s" % (str(response), str(int(gtk.RESPONSE_ACCEPT))))) ok,retry = False,True while response == gtk.RESPONSE_ACCEPT: @@ -503,7 +502,7 @@ class AddDB(gtk.Dialog): ,name, db_desc, user, passwd, host) = ("error", "error", None, None, None ,None, None, None, None, None) if ok: - log.debug("start creating new db") + log.debug(_("start creating new db")) # add a new db master_password = None dbms = self.dbnames[ self.cb_dbms.get_active_text() ] @@ -522,7 +521,7 @@ class AddDB(gtk.Dialog): # test db after creating? status, err_msg, icon = GuiDatabase.testDB(self.config, dbms, dbms_num, name, user, passwd, host) - log.debug('tested new db, result='+str((status,err_msg))) + log.debug(_('tested new db, result=%s') % str((status,err_msg))) if status == 'ok': #dia = InfoBox( parent=self, str1=_('Database created') ) str1 = _('Database created') @@ -541,7 +540,7 @@ class AddDB(gtk.Dialog): """check fields and return true/false according to whether user wants to try again return False if fields are ok """ - log.debug("check_fields: starting") + log.debug(_("check_fields: starting")) try_again = False ok = True @@ -573,11 +572,11 @@ class AddDB(gtk.Dialog): # checks for postgres pass else: - msg = "Unknown Database Type selected" + msg = _("Unknown Database Type selected") ok = False if not ok: - log.debug("check_fields: open dialog") + log.debug(_("check_fields: open dialog")) dia = gtk.MessageDialog( parent=self , flags=gtk.DIALOG_DESTROY_WITH_PARENT , type=gtk.MESSAGE_ERROR @@ -590,14 +589,14 @@ class AddDB(gtk.Dialog): dia.vbox.add(l) dia.show_all() ret = dia.run() - log.debug("check_fields: ret is "+str(ret)+" cancel is "+str(int(gtk.RESPONSE_CANCEL))) + log.debug(_("check_fields: ret is %s cancel is %s" % (str(ret), str(int(gtk.RESPONSE_CANCEL))))) if ret == gtk.RESPONSE_YES: try_again = True - log.debug("check_fields: destroy dialog") + log.debug(_("check_fields: destroy dialog")) dia.hide() dia.destroy() - log.debug("check_fields: returning ok as "+str(ok)+", try_again as "+str(try_again)) + log.debug(_("check_fields: returning ok as %s, try_again as %s") % (str(ok), str(try_again))) return(ok,try_again) def db_type_changed(self, widget, data): From 05220f1c6f651ed7920eb02d560bca737969ac25 Mon Sep 17 00:00:00 2001 From: Erki Ferenc Date: Mon, 30 Aug 2010 01:21:55 +0200 Subject: [PATCH 51/53] l10n: updated Hungarian translation --- pyfpdb/locale/fpdb-hu_HU.po | 209 +++++++++++++++--------------------- 1 file changed, 87 insertions(+), 122 deletions(-) diff --git a/pyfpdb/locale/fpdb-hu_HU.po b/pyfpdb/locale/fpdb-hu_HU.po index bc8be173..b33e9e57 100644 --- a/pyfpdb/locale/fpdb-hu_HU.po +++ b/pyfpdb/locale/fpdb-hu_HU.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.20.905 plus git\n" "POT-Creation-Date: 2010-08-29 22:08+CEST\n" -"PO-Revision-Date: 2010-08-29 14:25+0200\n" +"PO-Revision-Date: 2010-08-30 01:20+0200\n" "Last-Translator: Ferenc Erki \n" "Language-Team: Hungarian \n" "Language: hu\n" @@ -28,17 +28,16 @@ msgid "reading antes" msgstr "antek olvasása" #: AbsoluteToFpdb.py:236 EverleafToFpdb.py:229 -#, fuzzy msgid "No bringin found." -msgstr "Beülő nem található" +msgstr "Nyitó hívás nem található." #: AbsoluteToFpdb.py:243 EverleafToFpdb.py:236 msgid "No small blind" -msgstr "" +msgstr "Nincs kisvak" #: AbsoluteToFpdb.py:270 msgid "Absolute readStudPlayerCards is only a stub." -msgstr "" +msgstr "Az Absolute terem readStudPlayerCards funkciója csak egy csonk." #: AbsoluteToFpdb.py:337 BetfairToFpdb.py:229 CarbonToFpdb.py:288 #: EverleafToFpdb.py:325 FulltiltToFpdb.py:715 PartyPokerToFpdb.py:525 @@ -72,11 +71,11 @@ msgstr "GameInfo regex nem illeszkedik" #: BetfairToFpdb.py:130 msgid "readPlayerStacks: Less than 2 players found in a hand" -msgstr "" +msgstr "readPlayerStacks: Kettőnél kevesebb játékost találtam egy leosztásban" #: BetfairToFpdb.py:170 msgid "No bringin found" -msgstr "Beülő nem található" +msgstr "Nyitó hívás nem található" #: BetfairToFpdb.py:206 OnGameToFpdb.py:339 PokerStarsToFpdb.py:441 msgid "DEBUG: unimplemented readAction: '%s' '%s'" @@ -109,9 +108,10 @@ msgstr "" " vagy itt: %s\n" #: Configuration.py:135 Configuration.py:136 -#, fuzzy msgid "Error copying .example config file, cannot fall back. Exiting.\n" -msgstr "Hiba a .example fájl másolása közben, nem tudom folytatni. Kilépés.\n" +msgstr "" +"Hiba a .example konfigurációs fájl másolása közben, nem tudom folytatni. " +"Kilépés.\n" #: Configuration.py:140 Configuration.py:141 msgid "No %s found, cannot fall back. Exiting.\n" @@ -202,9 +202,8 @@ msgid "Error parsing %s. See error log file." msgstr "Hiba a(z) %s értelmezése közben. Nézz bele a hibanaplóba." #: Configuration.py:831 -#, fuzzy msgid "Error parsing example file %s. See error log file." -msgstr "Hiba a(z) %s értelmezése közben. Nézz bele a hibanaplóba." +msgstr "Hiba a(z) %s mintafájl értelmezése közben. Nézz bele a hibanaplóba." #: Database.py:74 msgid "Not using sqlalchemy connection pool." @@ -516,7 +515,7 @@ msgstr "nyomj ENTER-t a folytatáshoz" #: EverleafToFpdb.py:264 msgid "Everleaf readStudPlayerCards is only a stub." -msgstr "" +msgstr "Az Everleaf terem readStudPlayerCards funkciója csak egy csonk." #: Filters.py:62 msgid "All" @@ -567,9 +566,8 @@ msgid "Grouping:" msgstr "Csoportosítás:" #: Filters.py:66 -#, fuzzy msgid "Show Position Stats" -msgstr "Pozíció" +msgstr "Pozíciók" #: Filters.py:67 TourneyFilters.py:60 msgid "Date:" @@ -645,11 +643,11 @@ msgstr "Nem található játék az adatbázisban" #: Filters.py:894 msgid "From:" -msgstr "" +msgstr "Ettől:" #: Filters.py:908 msgid "To:" -msgstr "" +msgstr "Eddig:" #: Filters.py:913 msgid " Clear Dates " @@ -665,77 +663,75 @@ msgstr "Kész" #: FulltiltToFpdb.py:361 msgid "Player bringing in: %s for %s" -msgstr "" +msgstr "Nyitó hívás: %s hív %s-t" #: FulltiltToFpdb.py:364 -#, fuzzy msgid "No bringin found, handid =%s" -msgstr "Beülő nem található" +msgstr "Nyitó hívás nem található, leosztásazonosító = %s" #: FulltiltToFpdb.py:421 -#, fuzzy msgid "FullTilt: DEBUG: unimplemented readAction: '%s' '%s'" -msgstr "DEBUG: nem ismert readAction: '%s' '%s'" +msgstr "FullTilt: DEBUG: nem ismert readAction: '%s' '%s'" #: FulltiltToFpdb.py:497 msgid "determineTourneyType : Parsing NOK" -msgstr "" +msgstr "determineTourneyType : értelmezés nem OK" #: FulltiltToFpdb.py:555 msgid "Unable to get a valid Tournament ID -- File rejected" -msgstr "" +msgstr "Nem sikerült érvényes versenyazonosítót találni --- A fájl elutasítva" #: FulltiltToFpdb.py:586 msgid "Conflict between buyins read in topline (%s) and in BuyIn field (%s)" msgstr "" +"Eltérés a beülők mértéke között a fejlécben (%s) és a Beülő mezőben (%s)" #: FulltiltToFpdb.py:593 msgid "Conflict between fees read in topline (%s) and in BuyIn field (%s)" msgstr "" +"Eltérés a díjak mértéke között a fejlécben (%s) és a Beülő mezőben (%s)" #: FulltiltToFpdb.py:597 msgid "Unable to affect a buyin to this tournament : assume it's a freeroll" msgstr "" +"Nem sikerült beülőt meghatározni ehhez a versenyhez : feltételezem, hogy ez " +"egy freeroll" #: FulltiltToFpdb.py:698 msgid "FullTilt: Player finishing stats unreadable : %s" -msgstr "" +msgstr "FullTilt: A következő játékos helyezési adata nem olvashatóak : %s" #: FulltiltToFpdb.py:707 msgid "FullTilt: %s not found in tourney.ranks ..." -msgstr "" +msgstr "FullTilt: %s nem található a verseny helyezései között ..." #: FulltiltToFpdb.py:709 msgid "FullTilt: Bad parsing : finish position incoherent : %s / %s" -msgstr "" +msgstr "FullTilt: Hibás értelmezés : a helyezések nem egyeznek : %s / %s" #: GuiAutoImport.py:85 msgid "Time between imports in seconds:" msgstr "Importálások közti idő (mp):" #: GuiAutoImport.py:116 GuiAutoImport.py:184 GuiAutoImport.py:261 -#, fuzzy msgid " Start _Auto Import " -msgstr " _AutoImport indítása " +msgstr " _Auto Import indítása " #: GuiAutoImport.py:135 -#, fuzzy msgid "Auto Import Ready." -msgstr "AutoImport kész." +msgstr "Auto Import kész." #: GuiAutoImport.py:148 -#, fuzzy msgid "Please choose the path that you want to Auto Import" -msgstr "Válaszd ki a könyvtárat az AutoImporthoz" +msgstr "Válaszd ki a könyvtárat az Auto Importhoz" #: GuiAutoImport.py:171 msgid " _Auto Import Running " -msgstr " _AutoImport fut " +msgstr " _Auto Import fut " #: GuiAutoImport.py:182 -#, fuzzy msgid " Stop _Auto Import " -msgstr " _AutoImport leállítása " +msgstr " _Auto Import leállítása " #: GuiAutoImport.py:207 msgid "" @@ -743,12 +739,11 @@ msgid "" "Global lock taken ... Auto Import Started.\n" msgstr "" "\n" -"Globális zárolás OK ... AutoImport elindítva.\n" +"Globális zárolás OK ... Auto Import elindítva.\n" #: GuiAutoImport.py:209 -#, fuzzy msgid " _Stop Auto Import " -msgstr " _AutoImport leállítása " +msgstr " _Auto Import leállítása " #: GuiAutoImport.py:225 msgid "opening pipe to HUD" @@ -763,31 +758,28 @@ msgstr "" "*** GuiAutoImport Hiba a cső nyitásakor: " #: GuiAutoImport.py:249 -#, fuzzy msgid "" "\n" "Auto Import aborted - global lock not available" msgstr "" "\n" -"AutoImport megszakítva - nem elérhető a globális zárolás" +"Auto Import megszakítva - nem elérhető a globális zárolás" #: GuiAutoImport.py:254 -#, fuzzy msgid "" "\n" "Stopping Auto Import - global lock released." msgstr "" "\n" -"AutoImport leállítása - globális zárolás feloldva." +"Auto Import leállítása - globális zárolás feloldva." #: GuiAutoImport.py:256 -#, fuzzy msgid "" "\n" " * Stop Auto Import: HUD already terminated" msgstr "" "\n" -" * AutoImport megállítása: A HUD már nem fut" +" * Auto Import megállítása: A HUD már nem fut" #: GuiAutoImport.py:283 msgid "Browse..." @@ -824,7 +816,6 @@ msgid "Import Complete" msgstr "Importálás kész" #: GuiBulkImport.py:139 -#, fuzzy msgid "bulk import aborted - global lock not available" msgstr "importálás megszakítva - nem elérhető a globális zárolás" @@ -958,17 +949,16 @@ msgid "" "GuiBulkImport done: Stored: %d \tDuplicates: %d \tPartial: %d \tErrors: %d " "in %s seconds - %.0f/sec" msgstr "" -"GuiBulkImport kész: Tárolt: %d \tDuplikáció: %d \tRészleges: %d \tHibák: %d " -"%s másodperc alatt - %.0f/mp" +"GuiBulkImport kész: Tárolt: %d \tDuplikáció: %d \tRészleges: %d \tHibák: %d %" +"s másodperc alatt - %.0f/mp" #: GuiDatabase.py:117 msgid "_Add" -msgstr "" +msgstr "Hozzá_adás" #: GuiDatabase.py:121 -#, fuzzy msgid "_Refresh" -msgstr "Frissítés" +msgstr "F_rissítés" #: GuiDatabase.py:125 msgid "Type" @@ -996,7 +986,7 @@ msgstr "Kiszolgáló" #: GuiDatabase.py:131 msgid "Open" -msgstr "" +msgstr "Megnyitva" #: GuiDatabase.py:132 msgid "Status" @@ -1011,9 +1001,8 @@ msgid "finished." msgstr "befejezve." #: GuiDatabase.py:303 -#, fuzzy msgid "loadDbs error: " -msgstr "loaddbs hiba: " +msgstr "loadDbs hiba: " #: GuiDatabase.py:324 GuiLogView.py:200 GuiTourneyPlayerStats.py:466 msgid "***sortCols error: " @@ -1024,9 +1013,8 @@ msgid "sortCols error: " msgstr "sortCols hiba: " #: GuiDatabase.py:371 -#, fuzzy msgid "testDB: trying to connect to: %s/%s, %s, %s/%s" -msgstr "loaddbs: kapcolódási próbálkozás: %s/%s, %s, %s/%s" +msgstr "testDB: kapcsolódási kísérlet: %s/%s, %s, %s/%s" #: GuiDatabase.py:374 msgid " connected ok" @@ -1054,83 +1042,71 @@ msgid "Please check that the MySQL service has been started" msgstr "Kérlek ellenőrizd, hogy a MySQL szolgáltatás el van-e indítva" #: GuiDatabase.py:392 fpdb.pyw:891 -#, fuzzy msgid "" "PostgreSQL Server reports: Access denied. Are your permissions set correctly?" msgstr "" -"Postgres szerver jelenti: A hozzáférés megtagadva. Biztosan megfelelőek a " +"PostgreSQL szerver jelenti: A hozzáférés megtagadva. Megfelelőek a " "jogosultságaid?" #: GuiDatabase.py:395 fpdb.pyw:893 -#, fuzzy msgid "PostgreSQL client reports: Unable to connect - " -msgstr "Postgres kliens jelenti: Nem sikerült a kapcsolódás - " +msgstr "PostgreSQL kliens jelenti: Nem sikerült a kapcsolódás - " #: GuiDatabase.py:396 fpdb.pyw:894 -#, fuzzy msgid "Please check that the PostgreSQL service has been started" -msgstr "Kérlek ellenőrizd, hogy a Postgres szolgáltatás el van-e indítva" +msgstr "Kérlek ellenőrizd, hogy a PostgreSQL szolgáltatás el van-e indítva" #: GuiDatabase.py:406 -#, fuzzy msgid "db connection to " -msgstr "folytató nyitás %" +msgstr "kapcsolódás az adatbázishoz " #: GuiDatabase.py:434 -#, fuzzy msgid "DB Type" -msgstr "Típus" +msgstr "Adatbázis típus" #: GuiDatabase.py:444 -#, fuzzy msgid "DB Name" -msgstr "Név" +msgstr "Adatbázis név" #: GuiDatabase.py:452 -#, fuzzy msgid "DB Description" -msgstr "Leírás" +msgstr "Adatbázis leírás" #: GuiDatabase.py:473 -#, fuzzy msgid "Host Computer" -msgstr "Importálás kész" +msgstr "Kiszolgáló" #: GuiDatabase.py:528 -#, fuzzy msgid "Database created" -msgstr "A_datbázis" +msgstr "Adatbázis létrehozva" #: GuiDatabase.py:531 -#, fuzzy msgid "Database creation failed" -msgstr " index létrehozása nem sikerült: " +msgstr "Adatbázis létrehozása nem sikerült" #: GuiDatabase.py:550 msgid "No Database Name given" -msgstr "" +msgstr "Nem lett adatbázis név megadva" #: GuiDatabase.py:553 msgid "No Database Description given" -msgstr "" +msgstr "Nem lett adatbázis leírás megadva" #: GuiDatabase.py:556 -#, fuzzy msgid "No Username given" -msgstr "Felhasználónév" +msgstr "Nem lett felhasználónév megadva" #: GuiDatabase.py:559 -#, fuzzy msgid "No Password given" -msgstr "Jelszó" +msgstr "Nem lett jelszó megadva" #: GuiDatabase.py:562 msgid "No Host given" -msgstr "" +msgstr "Nem lett kiszolgáló megadva" #: GuiDatabase.py:589 msgid "Do you want to try again?" -msgstr "" +msgstr "Meg akarod próbálni újból?" #: GuiDatabase.py:702 GuiLogView.py:213 msgid "Test Log Viewer" @@ -1487,11 +1463,11 @@ msgstr "\"%s\" nevű asztal már nem létezik\n" #: HUD_main.pyw:321 msgid "" -"HUD_main.read_stdin: hand read in %4.3f seconds (%4.3f,%4.3f,%4.3f,%4.3f," -"%4.3f,%4.3f)" +"HUD_main.read_stdin: hand read in %4.3f seconds (%4.3f,%4.3f,%4.3f,%4.3f,%" +"4.3f,%4.3f)" msgstr "" -"HUD_main.read_stdin: leosztás beolvasva %4.3f mp alatt (%4.3f,%4.3f,%4.3f," -"%4.3f,%4.3f,%4.3f)" +"HUD_main.read_stdin: leosztás beolvasva %4.3f mp alatt (%4.3f,%4.3f,%4.3f,%" +"4.3f,%4.3f,%4.3f)" #: HUD_run_me.py:45 msgid "HUD_main starting\n" @@ -1714,9 +1690,9 @@ msgid "Hand.insert(): hid #: %s is a duplicate" msgstr "Hand.insert(): %s leosztásazonosító duplikáció" #: Hand.py:318 -#, fuzzy msgid "markstreets didn't match - Assuming hand %s was cancelled" -msgstr "markStreets nem egyezik - Leosztás érvénytelenítését feltételezem" +msgstr "" +"markstreets nem egyezik - A(z) %s leosztás érvénytelenítését feltételezem" #: Hand.py:320 msgid "FpdbParseError: markStreets appeared to fail: First 100 chars: '%s'" @@ -1828,7 +1804,7 @@ msgstr "%s utcán %s játékos kiegészít erre: %s" #: Hand.py:1270 msgid "Bringin: %s, %s" -msgstr "Beülő: %s, %s" +msgstr "Nyitó hívás: %s, %s" #: Hand.py:1310 msgid "*** 3RD STREET ***" @@ -2149,13 +2125,13 @@ msgid "Unable to recognise gametype from: '%s'" msgstr "Nem sikerült felismerni a játéktípust innen: '%s'" #: OnGameToFpdb.py:192 -#, fuzzy msgid "determineGameType: limit not found in self.limits(%s). hand: '%s'" -msgstr "determineGameType: Nem sikerült felismerni a játéktípust innen: '%s'" +msgstr "" +"determineGameType: limit nem található ebben: self.limits(%s). leosztás: '%s'" #: OnGameToFpdb.py:194 msgid "limit not found in self.limits(%s). hand: '%s'" -msgstr "" +msgstr "limit nem található ebben: self.limits(%s). leosztás: '%s'" #: OnGameToFpdb.py:268 PartyPokerToFpdb.py:351 PokerStarsToFpdb.py:321 #: UltimateBetToFpdb.py:144 Win2dayToFpdb.py:156 @@ -2163,9 +2139,8 @@ msgid "readButton: not found" msgstr "readButton: nem található" #: OnGameToFpdb.py:288 -#, fuzzy msgid "readBlinds in noSB exception - no SB created" -msgstr "readBlinds noSB-n belül hiba" +msgstr "noSB-n belüli readBlinds hiba - kisvak nem lett létrehozva" #: Options.py:40 msgid "If passed error output will go to the console rather than ." @@ -2665,7 +2640,7 @@ msgstr "incrementPlayerWinnings: név : '%s' - plusz nyeremény (%s)" #: UltimateBetToFpdb.py:42 msgid "Initialising UltimateBetconverter class" -msgstr "" +msgstr "UltimateBetconverter osztály inicializálása" #: WinTables.py:82 msgid "Window %s not found. Skipping." @@ -2844,24 +2819,21 @@ msgid "Confirm deleting and recreating tables" msgstr "Erősítsd meg a táblák törlését és újra létrehozását" #: fpdb.pyw:547 -#, fuzzy msgid "Please confirm that you want to (re-)create the tables." msgstr "" -"Kérlek erősítsd meg, hogy valóban újra akarod generálni a HUD gyorstárat." +"Kérlek erősítsd meg, hogy valóban (újra) létre akarod hozni a táblákat." #: fpdb.pyw:548 -#, fuzzy msgid "" " If there already are tables in the database %s on %s they will be deleted " "and you will have to re-import your histories.\n" msgstr "" -"), akkor azok törölve lesznek, és újra kell importálnod a " -"leosztástörténeteket.\n" -"Ja, és ez eltarthat egy darabig:)" +" Ha már vannak táblák a(z) %s adatbázisban a(z) %s kiszolgálón, akkor azok " +"törölve lesznek, és újra kell majd importálnod a leosztástörténeteket.\n" #: fpdb.pyw:549 msgid "This may take a while." -msgstr "" +msgstr "Ez eltarthat egy darabig." #: fpdb.pyw:574 msgid "User cancelled recreating tables" @@ -2978,7 +2950,7 @@ msgstr "A" #: fpdb.pyw:817 msgid "_Auto Import and HUD" -msgstr "_AutoImport és HUD" +msgstr "_Auto Import és HUD" #: fpdb.pyw:818 msgid "H" @@ -3103,13 +3075,13 @@ msgstr "" "%s.\n" #: fpdb.pyw:862 -#, fuzzy msgid "" "Edit your screen_name and hand history path in the supported_sites section " "of the Preferences window (Main menu) before trying to import hands." msgstr "" -"résznél a Beállítások ablakban (Főmenü) mielőtt megpróbálnál leosztásokat " -"importálni." +"Állítsd be a screen_name-et és a leosztástörténetek útvonalát a " +"supported_sites résznél a Beállítások ablakban (Főmenü) mielőtt megpróbálnál " +"leosztásokat importálni." #: fpdb.pyw:884 msgid "Connected to SQLite: %s" @@ -3147,22 +3119,20 @@ msgstr "" "kiszolgálón" #: fpdb.pyw:951 -#, fuzzy msgid "" "\n" "Global lock taken by %s" msgstr "" "\n" -"Globális zárolást végzett:" +"Globális zárolást végzett %s" #: fpdb.pyw:954 -#, fuzzy msgid "" "\n" "Failed to get global lock, it is currently held by %s" msgstr "" "\n" -"Globális zárolás meghiúsult, jelenleg már zárolta:" +"Globális zárolás meghiúsult, %s már zárolta" #: fpdb.pyw:964 msgid "Quitting normally" @@ -3174,7 +3144,7 @@ msgstr "Globális zárolás feloldva.\n" #: fpdb.pyw:995 msgid "Auto Import" -msgstr "AutoImport" +msgstr "Auto Import" #: fpdb.pyw:1002 msgid "Bulk Import" @@ -3258,8 +3228,8 @@ msgstr "" "GPL2 vagy újabb licensszel.\n" "A Windows telepítő csomag tartalmaz MIT licensz hatálya alá eső részeket " "is.\n" -"A licenszek szövegét megtalálod az fpdb főkönyvtárában az agpl-3.0.txt, " -"gpl-2.0.txt, gpl-3.0.txt és mit.txt fájlokban." +"A licenszek szövegét megtalálod az fpdb főkönyvtárában az agpl-3.0.txt, gpl-" +"2.0.txt, gpl-3.0.txt és mit.txt fájlokban." #: fpdb.pyw:1060 msgid "Help" @@ -3270,7 +3240,6 @@ msgid "Graphs" msgstr "Grafikonok" #: fpdb.pyw:1119 -#, fuzzy msgid "" "\n" "Note: error output is being diverted to fpdb-errors.txt and HUD-errors.txt " @@ -3278,7 +3247,7 @@ msgid "" msgstr "" "\n" "Megjegyzés: a hibakimenet átirányítva az fpdb-errors.txt és HUD-errors.txt " -"fájlokba itt:\n" +"fájlokba itt: %s" #: fpdb.pyw:1148 msgid "fpdb starting ..." @@ -3289,7 +3258,6 @@ msgid "FPDB WARNING" msgstr "FPDB FIGYELMEZTETÉS" #: fpdb.pyw:1224 -#, fuzzy msgid "" "WARNING: Unable to find output hand history directory %s\n" "\n" @@ -3329,7 +3297,6 @@ msgstr "" "pénznem még nem támogatott" #: fpdb_import.py:227 -#, fuzzy msgid "Attempted to add non-directory '%s' as an import directory" msgstr "Nem könyvtár ('%s') megadása importálási könyvtárként" @@ -3362,14 +3329,12 @@ msgid "No need to rebuild hudcache." msgstr "Nem szükséges a HUD gyorstár újraépítése." #: fpdb_import.py:313 -#, fuzzy msgid "sending finish message queue length =" -msgstr "befejező üzenet küldése; qlen =" +msgstr "befejező üzenet küldése; sor hossza =" #: fpdb_import.py:439 fpdb_import.py:441 -#, fuzzy msgid "Converting %s" -msgstr "Konvertálás" +msgstr "%s konvertálása" #: fpdb_import.py:477 msgid "Hand processed but empty" From 54f7410e49c05862c8c72a5928cdf523bf87e104 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Mon, 30 Aug 2010 01:31:14 +0200 Subject: [PATCH 52/53] l10n: update pot/po/mo files --- pyfpdb/locale/de/LC_MESSAGES/fpdb.mo | Bin 20424 -> 20643 bytes pyfpdb/locale/fpdb-de_DE.po | 88 +++++++++++++++------ pyfpdb/locale/fpdb-en_GB.pot | 76 +++++++++++++----- pyfpdb/locale/fpdb-hu_HU.po | 114 +++++++++++++++++++-------- pyfpdb/locale/hu/LC_MESSAGES/fpdb.mo | Bin 59291 -> 66341 bytes 5 files changed, 196 insertions(+), 82 deletions(-) diff --git a/pyfpdb/locale/de/LC_MESSAGES/fpdb.mo b/pyfpdb/locale/de/LC_MESSAGES/fpdb.mo index 5b67149b32a449e4d703768bf8d5603198bc4a95..b41b0c9387d86f4f4a4f9ecd804430784738d416 100644 GIT binary patch delta 3933 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 diff --git a/pyfpdb/locale/fpdb-de_DE.po b/pyfpdb/locale/fpdb-de_DE.po index 622557bc..47bacde7 100644 --- a/pyfpdb/locale/fpdb-de_DE.po +++ b/pyfpdb/locale/fpdb-de_DE.po @@ -3,8 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: 0.20.905 plus git\n" -"POT-Creation-Date: 2010-08-29 22:08+CEST\n" -"PO-Revision-Date: 2010-08-29 20:45+0200\n" +"POT-Creation-Date: 2010-08-30 01:19+CEST\n" +"PO-Revision-Date: 2010-08-30 00:57+0200\n" "Last-Translator: Steffen Schaumburg \n" "Language-Team: Fpdb\n" "Language: de\n" @@ -18,21 +18,21 @@ msgstr "" #: AbsoluteToFpdb.py:167 BetfairToFpdb.py:114 CarbonToFpdb.py:151 #: EverleafToFpdb.py:148 FulltiltToFpdb.py:221 msgid "Didn't match re_HandInfo" -msgstr "" +msgstr "Keine Treffer für re_HandInfo" #: AbsoluteToFpdb.py:224 EverleafToFpdb.py:217 FulltiltToFpdb.py:351 #: OnGameToFpdb.py:296 PokerStarsToFpdb.py:359 UltimateBetToFpdb.py:183 #: Win2dayToFpdb.py:197 msgid "reading antes" -msgstr "" +msgstr "Lese Antes" #: AbsoluteToFpdb.py:236 EverleafToFpdb.py:229 msgid "No bringin found." -msgstr "" +msgstr "Kein Bringin gefunden." #: AbsoluteToFpdb.py:243 EverleafToFpdb.py:236 msgid "No small blind" -msgstr "" +msgstr "Keine Small Blind" #: AbsoluteToFpdb.py:270 msgid "Absolute readStudPlayerCards is only a stub." @@ -935,11 +935,11 @@ msgstr "Name" msgid "Description" msgstr "Beschreibung" -#: GuiDatabase.py:128 GuiDatabase.py:459 GuiImapFetcher.py:119 +#: GuiDatabase.py:128 GuiDatabase.py:458 GuiImapFetcher.py:119 msgid "Username" msgstr "Benutzername" -#: GuiDatabase.py:129 GuiDatabase.py:466 GuiImapFetcher.py:119 +#: GuiDatabase.py:129 GuiDatabase.py:465 GuiImapFetcher.py:119 msgid "Password" msgstr "Passwort" @@ -1017,62 +1017,100 @@ msgid "Please check that the PostgreSQL service has been started" msgstr "Bitte überprüfen Sie, dass der PostgreSQL-Dienst gestartet ist" #: GuiDatabase.py:406 -msgid "db connection to " +msgid "db connection to %s, %s, %s, %s, %s failed: %s" msgstr "" -#: GuiDatabase.py:434 +#: GuiDatabase.py:414 +#, fuzzy +msgid "AddDB starting" +msgstr "fpdb startet ..." + +#: GuiDatabase.py:423 +#, fuzzy +msgid "Add New Database" +msgstr "_Datenbank" + +#: GuiDatabase.py:433 msgid "DB Type" msgstr "" -#: GuiDatabase.py:444 +#: GuiDatabase.py:443 msgid "DB Name" msgstr "" -#: GuiDatabase.py:452 +#: GuiDatabase.py:451 msgid "DB Description" msgstr "" -#: GuiDatabase.py:473 +#: GuiDatabase.py:472 msgid "Host Computer" msgstr "" -#: GuiDatabase.py:528 +#: GuiDatabase.py:505 +msgid "start creating new db" +msgstr "" + +#: GuiDatabase.py:524 +msgid "tested new db, result=%s" +msgstr "" + +#: GuiDatabase.py:527 msgid "Database created" msgstr "Datenbank erstellt" -#: GuiDatabase.py:531 +#: GuiDatabase.py:530 msgid "Database creation failed" msgstr "Datenbankerstellung fehlgeschlagen" -#: GuiDatabase.py:550 +#: GuiDatabase.py:543 +msgid "check_fields: starting" +msgstr "" + +#: GuiDatabase.py:549 msgid "No Database Name given" msgstr "Kein Datenbankname eingegeben" -#: GuiDatabase.py:553 +#: GuiDatabase.py:552 msgid "No Database Description given" msgstr "Keine Datenbankbeschreibung eingegeben" -#: GuiDatabase.py:556 +#: GuiDatabase.py:555 msgid "No Username given" msgstr "Kein Benutzername eingegeben" -#: GuiDatabase.py:559 +#: GuiDatabase.py:558 msgid "No Password given" msgstr "Kein Passwort eingegeben" -#: GuiDatabase.py:562 +#: GuiDatabase.py:561 msgid "No Host given" msgstr "Kein Host eingegeben" -#: GuiDatabase.py:589 +#: GuiDatabase.py:575 +msgid "Unknown Database Type selected" +msgstr "" + +#: GuiDatabase.py:579 +msgid "check_fields: open dialog" +msgstr "" + +#: GuiDatabase.py:588 msgid "Do you want to try again?" msgstr "Wollen Sie es nochmal versuchen?" -#: GuiDatabase.py:702 GuiLogView.py:213 +#: GuiDatabase.py:595 +msgid "check_fields: destroy dialog" +msgstr "" + +#: GuiDatabase.py:599 +msgid "check_fields: returning ok as %s, try_again as %s" +msgstr "" + +#: GuiDatabase.py:701 GuiLogView.py:213 msgid "Test Log Viewer" msgstr "" -#: GuiDatabase.py:707 GuiLogView.py:218 +#: GuiDatabase.py:706 GuiLogView.py:218 msgid "Log Viewer" msgstr "" @@ -1996,9 +2034,7 @@ msgid "Error finding actual seat.\n" msgstr "" #: Hud.py:589 -msgid "" -"------------------------------------------------------------\n" -"Creating hud from hand %s\n" +msgid "Creating hud from hand " msgstr "" #: Hud.py:638 diff --git a/pyfpdb/locale/fpdb-en_GB.pot b/pyfpdb/locale/fpdb-en_GB.pot index 71ec500e..89cd55e6 100644 --- a/pyfpdb/locale/fpdb-en_GB.pot +++ b/pyfpdb/locale/fpdb-en_GB.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2010-08-29 22:08+CEST\n" +"POT-Creation-Date: 2010-08-30 01:30+CEST\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -910,11 +910,11 @@ msgstr "" msgid "Description" msgstr "" -#: GuiDatabase.py:128 GuiDatabase.py:459 GuiImapFetcher.py:119 +#: GuiDatabase.py:128 GuiDatabase.py:458 GuiImapFetcher.py:119 msgid "Username" msgstr "" -#: GuiDatabase.py:129 GuiDatabase.py:466 GuiImapFetcher.py:119 +#: GuiDatabase.py:129 GuiDatabase.py:465 GuiImapFetcher.py:119 msgid "Password" msgstr "" @@ -987,62 +987,98 @@ msgid "Please check that the PostgreSQL service has been started" msgstr "" #: GuiDatabase.py:406 -msgid "db connection to " +msgid "db connection to %s, %s, %s, %s, %s failed: %s" msgstr "" -#: GuiDatabase.py:434 +#: GuiDatabase.py:414 +msgid "AddDB starting" +msgstr "" + +#: GuiDatabase.py:423 +msgid "Add New Database" +msgstr "" + +#: GuiDatabase.py:433 msgid "DB Type" msgstr "" -#: GuiDatabase.py:444 +#: GuiDatabase.py:443 msgid "DB Name" msgstr "" -#: GuiDatabase.py:452 +#: GuiDatabase.py:451 msgid "DB Description" msgstr "" -#: GuiDatabase.py:473 +#: GuiDatabase.py:472 msgid "Host Computer" msgstr "" -#: GuiDatabase.py:528 +#: GuiDatabase.py:505 +msgid "start creating new db" +msgstr "" + +#: GuiDatabase.py:524 +msgid "tested new db, result=%s" +msgstr "" + +#: GuiDatabase.py:527 msgid "Database created" msgstr "" -#: GuiDatabase.py:531 +#: GuiDatabase.py:530 msgid "Database creation failed" msgstr "" -#: GuiDatabase.py:550 +#: GuiDatabase.py:543 +msgid "check_fields: starting" +msgstr "" + +#: GuiDatabase.py:549 msgid "No Database Name given" msgstr "" -#: GuiDatabase.py:553 +#: GuiDatabase.py:552 msgid "No Database Description given" msgstr "" -#: GuiDatabase.py:556 +#: GuiDatabase.py:555 msgid "No Username given" msgstr "" -#: GuiDatabase.py:559 +#: GuiDatabase.py:558 msgid "No Password given" msgstr "" -#: GuiDatabase.py:562 +#: GuiDatabase.py:561 msgid "No Host given" msgstr "" -#: GuiDatabase.py:589 +#: GuiDatabase.py:575 +msgid "Unknown Database Type selected" +msgstr "" + +#: GuiDatabase.py:579 +msgid "check_fields: open dialog" +msgstr "" + +#: GuiDatabase.py:588 msgid "Do you want to try again?" msgstr "" -#: GuiDatabase.py:702 GuiLogView.py:213 +#: GuiDatabase.py:595 +msgid "check_fields: destroy dialog" +msgstr "" + +#: GuiDatabase.py:599 +msgid "check_fields: returning ok as %s, try_again as %s" +msgstr "" + +#: GuiDatabase.py:701 GuiLogView.py:213 msgid "Test Log Viewer" msgstr "" -#: GuiDatabase.py:707 GuiLogView.py:218 +#: GuiDatabase.py:706 GuiLogView.py:218 msgid "Log Viewer" msgstr "" @@ -1959,9 +1995,7 @@ msgid "" msgstr "" #: Hud.py:589 -msgid "" -"------------------------------------------------------------\n" -"Creating hud from hand %s\n" +msgid "Creating hud from hand " msgstr "" #: Hud.py:638 diff --git a/pyfpdb/locale/fpdb-hu_HU.po b/pyfpdb/locale/fpdb-hu_HU.po index b33e9e57..f7532086 100644 --- a/pyfpdb/locale/fpdb-hu_HU.po +++ b/pyfpdb/locale/fpdb-hu_HU.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.20.905 plus git\n" -"POT-Creation-Date: 2010-08-29 22:08+CEST\n" +"POT-Creation-Date: 2010-08-30 01:30+CEST\n" "PO-Revision-Date: 2010-08-30 01:20+0200\n" "Last-Translator: Ferenc Erki \n" "Language-Team: Hungarian \n" @@ -949,8 +949,8 @@ msgid "" "GuiBulkImport done: Stored: %d \tDuplicates: %d \tPartial: %d \tErrors: %d " "in %s seconds - %.0f/sec" msgstr "" -"GuiBulkImport kész: Tárolt: %d \tDuplikáció: %d \tRészleges: %d \tHibák: %d %" -"s másodperc alatt - %.0f/mp" +"GuiBulkImport kész: Tárolt: %d \tDuplikáció: %d \tRészleges: %d \tHibák: %d " +"%s másodperc alatt - %.0f/mp" #: GuiDatabase.py:117 msgid "_Add" @@ -972,11 +972,11 @@ msgstr "Név" msgid "Description" msgstr "Leírás" -#: GuiDatabase.py:128 GuiDatabase.py:459 GuiImapFetcher.py:119 +#: GuiDatabase.py:128 GuiDatabase.py:458 GuiImapFetcher.py:119 msgid "Username" msgstr "Felhasználónév" -#: GuiDatabase.py:129 GuiDatabase.py:466 GuiImapFetcher.py:119 +#: GuiDatabase.py:129 GuiDatabase.py:465 GuiImapFetcher.py:119 msgid "Password" msgstr "Jelszó" @@ -1057,62 +1057,103 @@ msgid "Please check that the PostgreSQL service has been started" msgstr "Kérlek ellenőrizd, hogy a PostgreSQL szolgáltatás el van-e indítva" #: GuiDatabase.py:406 -msgid "db connection to " -msgstr "kapcsolódás az adatbázishoz " +msgid "db connection to %s, %s, %s, %s, %s failed: %s" +msgstr "" -#: GuiDatabase.py:434 +#: GuiDatabase.py:414 +#, fuzzy +msgid "AddDB starting" +msgstr "readBlinds indítása" + +#: GuiDatabase.py:423 +#, fuzzy +msgid "Add New Database" +msgstr "A_datbázis" + +#: GuiDatabase.py:433 msgid "DB Type" msgstr "Adatbázis típus" -#: GuiDatabase.py:444 +#: GuiDatabase.py:443 msgid "DB Name" msgstr "Adatbázis név" -#: GuiDatabase.py:452 +#: GuiDatabase.py:451 msgid "DB Description" msgstr "Adatbázis leírás" -#: GuiDatabase.py:473 +#: GuiDatabase.py:472 msgid "Host Computer" msgstr "Kiszolgáló" -#: GuiDatabase.py:528 +#: GuiDatabase.py:505 +#, fuzzy +msgid "start creating new db" +msgstr "Hiba az indexek létrehozása közben: " + +#: GuiDatabase.py:524 +msgid "tested new db, result=%s" +msgstr "" + +#: GuiDatabase.py:527 msgid "Database created" msgstr "Adatbázis létrehozva" -#: GuiDatabase.py:531 +#: GuiDatabase.py:530 msgid "Database creation failed" msgstr "Adatbázis létrehozása nem sikerült" -#: GuiDatabase.py:550 +#: GuiDatabase.py:543 +#, fuzzy +msgid "check_fields: starting" +msgstr "readBlinds indítása" + +#: GuiDatabase.py:549 msgid "No Database Name given" msgstr "Nem lett adatbázis név megadva" -#: GuiDatabase.py:553 +#: GuiDatabase.py:552 msgid "No Database Description given" msgstr "Nem lett adatbázis leírás megadva" -#: GuiDatabase.py:556 +#: GuiDatabase.py:555 msgid "No Username given" msgstr "Nem lett felhasználónév megadva" -#: GuiDatabase.py:559 +#: GuiDatabase.py:558 msgid "No Password given" msgstr "Nem lett jelszó megadva" -#: GuiDatabase.py:562 +#: GuiDatabase.py:561 msgid "No Host given" msgstr "Nem lett kiszolgáló megadva" -#: GuiDatabase.py:589 +#: GuiDatabase.py:575 +#, fuzzy +msgid "Unknown Database Type selected" +msgstr "Ismeretlen játéktípus: '%s'" + +#: GuiDatabase.py:579 +msgid "check_fields: open dialog" +msgstr "" + +#: GuiDatabase.py:588 msgid "Do you want to try again?" msgstr "Meg akarod próbálni újból?" -#: GuiDatabase.py:702 GuiLogView.py:213 +#: GuiDatabase.py:595 +msgid "check_fields: destroy dialog" +msgstr "" + +#: GuiDatabase.py:599 +msgid "check_fields: returning ok as %s, try_again as %s" +msgstr "" + +#: GuiDatabase.py:701 GuiLogView.py:213 msgid "Test Log Viewer" msgstr "Napló böngésző (teszt)" -#: GuiDatabase.py:707 GuiLogView.py:218 +#: GuiDatabase.py:706 GuiLogView.py:218 msgid "Log Viewer" msgstr "Napló böngésző" @@ -1463,11 +1504,11 @@ msgstr "\"%s\" nevű asztal már nem létezik\n" #: HUD_main.pyw:321 msgid "" -"HUD_main.read_stdin: hand read in %4.3f seconds (%4.3f,%4.3f,%4.3f,%4.3f,%" -"4.3f,%4.3f)" +"HUD_main.read_stdin: hand read in %4.3f seconds (%4.3f,%4.3f,%4.3f,%4.3f," +"%4.3f,%4.3f)" msgstr "" -"HUD_main.read_stdin: leosztás beolvasva %4.3f mp alatt (%4.3f,%4.3f,%4.3f,%" -"4.3f,%4.3f,%4.3f)" +"HUD_main.read_stdin: leosztás beolvasva %4.3f mp alatt (%4.3f,%4.3f,%4.3f," +"%4.3f,%4.3f,%4.3f)" #: HUD_run_me.py:45 msgid "HUD_main starting\n" @@ -2079,12 +2120,8 @@ msgid "Error finding actual seat.\n" msgstr "Hiba az aktuális szék keresése közben.\n" #: Hud.py:589 -msgid "" -"------------------------------------------------------------\n" -"Creating hud from hand %s\n" +msgid "Creating hud from hand " msgstr "" -"------------------------------------------------------------\n" -"HUD készítése ebből a leosztásból: %s\n" #: Hud.py:638 msgid "" @@ -3228,8 +3265,8 @@ msgstr "" "GPL2 vagy újabb licensszel.\n" "A Windows telepítő csomag tartalmaz MIT licensz hatálya alá eső részeket " "is.\n" -"A licenszek szövegét megtalálod az fpdb főkönyvtárában az agpl-3.0.txt, gpl-" -"2.0.txt, gpl-3.0.txt és mit.txt fájlokban." +"A licenszek szövegét megtalálod az fpdb főkönyvtárában az agpl-3.0.txt, " +"gpl-2.0.txt, gpl-3.0.txt és mit.txt fájlokban." #: fpdb.pyw:1060 msgid "Help" @@ -3411,6 +3448,16 @@ msgstr "" "Nem találhatóak a GTK könyvtárak az útvonaladban - telepítsd a GTK-t, vagy " "állítsd be kézzel az útvonalat\n" +#~ msgid "db connection to " +#~ msgstr "kapcsolódás az adatbázishoz " + +#~ msgid "" +#~ "------------------------------------------------------------\n" +#~ "Creating hud from hand %s\n" +#~ msgstr "" +#~ "------------------------------------------------------------\n" +#~ "HUD készítése ebből a leosztásból: %s\n" + #~ msgid "Fatal Error - Config File Missing" #~ msgstr "Végzetes hiba - Hiányzó konfigurációs fájl" @@ -3474,9 +3521,6 @@ msgstr "" #~ msgid "Table not found." #~ msgstr "Az asztal nem található." -#~ msgid "readBlinds starting" -#~ msgstr "readBlinds indítása" - #~ msgid "re_postSB failed, hand=" #~ msgstr "re_postSB nem sikerült, leosztás=" diff --git a/pyfpdb/locale/hu/LC_MESSAGES/fpdb.mo b/pyfpdb/locale/hu/LC_MESSAGES/fpdb.mo index 2c4ea94ad6821a6a58ae76a1be9d08ba23e49357..37b38b530f781da5a262306de61cd16951374215 100644 GIT binary patch delta 18081 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 Date: Mon, 30 Aug 2010 01:33:44 +0200 Subject: [PATCH 53/53] l10n: updated Hungarian translation --- pyfpdb/locale/fpdb-hu_HU.po | 45 +++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 25 deletions(-) diff --git a/pyfpdb/locale/fpdb-hu_HU.po b/pyfpdb/locale/fpdb-hu_HU.po index f7532086..edd2a8f5 100644 --- a/pyfpdb/locale/fpdb-hu_HU.po +++ b/pyfpdb/locale/fpdb-hu_HU.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.20.905 plus git\n" "POT-Creation-Date: 2010-08-30 01:30+CEST\n" -"PO-Revision-Date: 2010-08-30 01:20+0200\n" +"PO-Revision-Date: 2010-08-30 01:33+0200\n" "Last-Translator: Ferenc Erki \n" "Language-Team: Hungarian \n" "Language: hu\n" @@ -949,8 +949,8 @@ msgid "" "GuiBulkImport done: Stored: %d \tDuplicates: %d \tPartial: %d \tErrors: %d " "in %s seconds - %.0f/sec" msgstr "" -"GuiBulkImport kész: Tárolt: %d \tDuplikáció: %d \tRészleges: %d \tHibák: %d " -"%s másodperc alatt - %.0f/mp" +"GuiBulkImport kész: Tárolt: %d \tDuplikáció: %d \tRészleges: %d \tHibák: %d %" +"s másodperc alatt - %.0f/mp" #: GuiDatabase.py:117 msgid "_Add" @@ -1058,17 +1058,15 @@ msgstr "Kérlek ellenőrizd, hogy a PostgreSQL szolgáltatás el van-e indítva" #: GuiDatabase.py:406 msgid "db connection to %s, %s, %s, %s, %s failed: %s" -msgstr "" +msgstr "adatbázis kapcsolódás sikertelen: %s, %s, %s, %s, %s hibaüzenet: %s" #: GuiDatabase.py:414 -#, fuzzy msgid "AddDB starting" -msgstr "readBlinds indítása" +msgstr "AddDB indítása" #: GuiDatabase.py:423 -#, fuzzy msgid "Add New Database" -msgstr "A_datbázis" +msgstr "Új adatbázis hozzáadása" #: GuiDatabase.py:433 msgid "DB Type" @@ -1087,13 +1085,12 @@ msgid "Host Computer" msgstr "Kiszolgáló" #: GuiDatabase.py:505 -#, fuzzy msgid "start creating new db" -msgstr "Hiba az indexek létrehozása közben: " +msgstr "új adatbázis létrehozásának indítása" #: GuiDatabase.py:524 msgid "tested new db, result=%s" -msgstr "" +msgstr "új adatbázis tesztelve, eredmény=%s" #: GuiDatabase.py:527 msgid "Database created" @@ -1104,9 +1101,8 @@ msgid "Database creation failed" msgstr "Adatbázis létrehozása nem sikerült" #: GuiDatabase.py:543 -#, fuzzy msgid "check_fields: starting" -msgstr "readBlinds indítása" +msgstr "check_fields: indítás" #: GuiDatabase.py:549 msgid "No Database Name given" @@ -1129,13 +1125,12 @@ msgid "No Host given" msgstr "Nem lett kiszolgáló megadva" #: GuiDatabase.py:575 -#, fuzzy msgid "Unknown Database Type selected" -msgstr "Ismeretlen játéktípus: '%s'" +msgstr "Ismeretlen adatbázis típus lett kiválasztva" #: GuiDatabase.py:579 msgid "check_fields: open dialog" -msgstr "" +msgstr "check_fields: párbeszéd nyitása" #: GuiDatabase.py:588 msgid "Do you want to try again?" @@ -1143,11 +1138,11 @@ msgstr "Meg akarod próbálni újból?" #: GuiDatabase.py:595 msgid "check_fields: destroy dialog" -msgstr "" +msgstr "check_fields: párbeszéd lezárása" #: GuiDatabase.py:599 msgid "check_fields: returning ok as %s, try_again as %s" -msgstr "" +msgstr "check_fields: OK visszaadása, mint %s, újrapróbálás, mint %s" #: GuiDatabase.py:701 GuiLogView.py:213 msgid "Test Log Viewer" @@ -1504,11 +1499,11 @@ msgstr "\"%s\" nevű asztal már nem létezik\n" #: HUD_main.pyw:321 msgid "" -"HUD_main.read_stdin: hand read in %4.3f seconds (%4.3f,%4.3f,%4.3f,%4.3f," -"%4.3f,%4.3f)" +"HUD_main.read_stdin: hand read in %4.3f seconds (%4.3f,%4.3f,%4.3f,%4.3f,%" +"4.3f,%4.3f)" msgstr "" -"HUD_main.read_stdin: leosztás beolvasva %4.3f mp alatt (%4.3f,%4.3f,%4.3f," -"%4.3f,%4.3f,%4.3f)" +"HUD_main.read_stdin: leosztás beolvasva %4.3f mp alatt (%4.3f,%4.3f,%4.3f,%" +"4.3f,%4.3f,%4.3f)" #: HUD_run_me.py:45 msgid "HUD_main starting\n" @@ -2121,7 +2116,7 @@ msgstr "Hiba az aktuális szék keresése közben.\n" #: Hud.py:589 msgid "Creating hud from hand " -msgstr "" +msgstr "HUD készítése ebből a leosztásból: " #: Hud.py:638 msgid "" @@ -3265,8 +3260,8 @@ msgstr "" "GPL2 vagy újabb licensszel.\n" "A Windows telepítő csomag tartalmaz MIT licensz hatálya alá eső részeket " "is.\n" -"A licenszek szövegét megtalálod az fpdb főkönyvtárában az agpl-3.0.txt, " -"gpl-2.0.txt, gpl-3.0.txt és mit.txt fájlokban." +"A licenszek szövegét megtalálod az fpdb főkönyvtárában az agpl-3.0.txt, gpl-" +"2.0.txt, gpl-3.0.txt és mit.txt fájlokban." #: fpdb.pyw:1060 msgid "Help"