diff --git a/Makefile b/Makefile index 0e930ed6..d7ad3a18 100644 --- a/Makefile +++ b/Makefile @@ -29,7 +29,7 @@ rules: pot: ./scripts/all_games.py gettext > po/games.pot - pygettext.py -k n_ -o po/pysol-1.pot $(PYSOLLIB_FILES) + ./scripts/pygettext.py -k n_ --ngettext-keyword ungettext -o po/pysol-1.pot $(PYSOLLIB_FILES) xgettext -L C --keyword=N_ -o po/pysol-2.pot data/glade-translations msgcat po/pysol-1.pot po/pysol-2.pot > po/pysol.pot rm -f po/pysol-1.pot po/pysol-2.pot diff --git a/po/games.pot b/po/games.pot index a1dbb520..aca176eb 100644 --- a/po/games.pot +++ b/po/games.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PySol 0.0.1\n" -"POT-Creation-Date: Thu May 10 14:22:52 2007\n" +"POT-Creation-Date: Fri May 11 22:05:05 2007\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -741,7 +741,7 @@ msgstr "" msgid "Die Bildgallerie" msgstr "" -msgid "Die Königsbergerin" +msgid "Die Koenigsbergerin" msgstr "" msgid "Die Russische" @@ -750,10 +750,7 @@ msgstr "" msgid "Die Schlange" msgstr "" -msgid "Die böse Sieben" -msgstr "" - -msgid "Die große Harfe" +msgid "Die boese Sieben" msgstr "" msgid "Die kleine Harfe" diff --git a/po/pysol.pot b/po/pysol.pot index 882f292a..3fa53762 100644 --- a/po/pysol.pot +++ b/po/pysol.pot @@ -14,17 +14,17 @@ msgid "" msgstr "" "#-#-#-#-# pysol-1.pot (PACKAGE VERSION) #-#-#-#-#\n" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: Thu May 10 14:24:01 2007\n" +"POT-Creation-Date: Fri May 11 22:06:13 2007\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: ENCODING\n" -"Generated-By: pygettext.py 1.5\n" +"Generated-By: pygettext.py 1.6con\n" "#-#-#-#-# pysol-2.pot (PACKAGE VERSION) #-#-#-#-#\n" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2007-05-10 14:24+0400\n" +"POT-Creation-Date: 2007-05-11 22:06+0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -32,56 +32,56 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: pysollib/actions.py:264 pysollib/tile/toolbar.py:189 -#: pysollib/tk/toolbar.py:192 +#: pysollib/actions.py:263 pysollib/tile/toolbar.py:186 +#: pysollib/tk/toolbar.py:189 msgid "New game" msgstr "" -#: pysollib/actions.py:277 pysollib/tile/menubar.py:851 -#: pysollib/tile/menubar.py:865 pysollib/tk/menubar.py:855 -#: pysollib/tk/menubar.py:869 +#: pysollib/actions.py:276 pysollib/tile/menubar.py:848 +#: pysollib/tile/menubar.py:862 pysollib/tk/menubar.py:852 +#: pysollib/tk/menubar.py:866 msgid "Select game" msgstr "" -#: pysollib/actions.py:291 +#: pysollib/actions.py:290 msgid "Invalid game number" msgstr "" -#: pysollib/actions.py:292 +#: pysollib/actions.py:291 msgid "Invalid game number\n" msgstr "" -#: pysollib/actions.py:309 +#: pysollib/actions.py:308 msgid "Select next game number" msgstr "" -#: pysollib/actions.py:318 pysollib/actions.py:328 +#: pysollib/actions.py:317 pysollib/actions.py:327 msgid "Select new game number" msgstr "" -#: pysollib/actions.py:319 +#: pysollib/actions.py:318 msgid "" "\n" "\n" "Enter new game number" msgstr "" -#: pysollib/actions.py:320 +#: pysollib/actions.py:319 msgid "&Next number" msgstr "" -#: pysollib/actions.py:320 pysollib/app.py:904 pysollib/app.py:1191 -#: pysollib/app.py:1203 pysollib/game.py:1030 pysollib/game.py:2293 +#: pysollib/actions.py:319 pysollib/app.py:903 pysollib/app.py:1190 +#: pysollib/app.py:1202 pysollib/game.py:1030 pysollib/game.py:2293 #: pysollib/tile/colorsdialog.py:112 pysollib/tile/edittextdialog.py:83 #: pysollib/tile/fontsdialog.py:144 pysollib/tile/fontsdialog.py:204 -#: pysollib/tile/gameinfodialog.py:155 pysollib/tile/menubar.py:1352 +#: pysollib/tile/gameinfodialog.py:155 pysollib/tile/menubar.py:1349 #: pysollib/tile/playeroptionsdialog.py:111 pysollib/tile/selectcardset.py:387 #: pysollib/tile/selecttile.py:161 pysollib/tile/soundoptionsdialog.py:168 #: pysollib/tile/soundoptionsdialog.py:206 pysollib/tile/timeoutsdialog.py:94 -#: pysollib/tile/tkhtml.py:504 pysollib/tile/tkstats.py:125 -#: pysollib/tile/tkstats.py:546 pysollib/tile/tkstats.py:645 -#: pysollib/tile/tkstats.py:727 pysollib/tile/tkwidget.py:154 -#: pysollib/tile/tkwidget.py:329 pysollib/tile/wizarddialog.py:143 +#: pysollib/tile/tkhtml.py:504 pysollib/tile/tkstats.py:123 +#: pysollib/tile/tkstats.py:544 pysollib/tile/tkstats.py:643 +#: pysollib/tile/tkstats.py:725 pysollib/tile/tkwidget.py:154 +#: pysollib/tile/tkwidget.py:329 pysollib/tile/wizarddialog.py:144 #: pysollib/tk/colorsdialog.py:111 pysollib/tk/edittextdialog.py:82 #: pysollib/tk/fontsdialog.py:143 pysollib/tk/fontsdialog.py:205 #: pysollib/tk/gameinfodialog.py:155 pysollib/tk/playeroptionsdialog.py:85 @@ -89,158 +89,158 @@ msgstr "" #: pysollib/tk/selectcardset.py:397 pysollib/tk/selecttile.py:159 #: pysollib/tk/soundoptionsdialog.py:170 pysollib/tk/soundoptionsdialog.py:211 #: pysollib/tk/timeoutsdialog.py:92 pysollib/tk/tkhtml.py:500 -#: pysollib/tk/tkstats.py:291 pysollib/tk/tkstats.py:517 -#: pysollib/tk/tkstats.py:584 pysollib/tk/tkstats.py:599 -#: pysollib/tk/tkstats.py:641 pysollib/tk/tkstats.py:713 -#: pysollib/tk/tkstats.py:797 pysollib/tk/tkstats.py:971 +#: pysollib/tk/tkstats.py:289 pysollib/tk/tkstats.py:515 +#: pysollib/tk/tkstats.py:582 pysollib/tk/tkstats.py:597 +#: pysollib/tk/tkstats.py:639 pysollib/tk/tkstats.py:711 +#: pysollib/tk/tkstats.py:795 pysollib/tk/tkstats.py:969 #: pysollib/tk/tkwidget.py:160 pysollib/tk/tkwidget.py:324 -#: pysollib/tk/wizarddialog.py:136 +#: pysollib/tk/wizarddialog.py:137 msgid "&OK" msgstr "" -#: pysollib/actions.py:320 pysollib/app.py:905 pysollib/app.py:1203 +#: pysollib/actions.py:319 pysollib/app.py:904 pysollib/app.py:1202 #: pysollib/game.py:1030 pysollib/game.py:1694 pysollib/game.py:1710 #: pysollib/game.py:1717 pysollib/game.py:1723 #: pysollib/tile/colorsdialog.py:112 pysollib/tile/edittextdialog.py:83 #: pysollib/tile/fontsdialog.py:144 pysollib/tile/fontsdialog.py:204 #: pysollib/tile/playeroptionsdialog.py:111 pysollib/tile/selectcardset.py:237 -#: pysollib/tile/selectgame.py:267 pysollib/tile/selectgame.py:398 +#: pysollib/tile/selectgame.py:266 pysollib/tile/selectgame.py:397 #: pysollib/tile/selecttile.py:161 pysollib/tile/soundoptionsdialog.py:168 #: pysollib/tile/timeoutsdialog.py:94 pysollib/tile/tkwidget.py:329 -#: pysollib/tile/wizarddialog.py:143 pysollib/tk/colorsdialog.py:111 +#: pysollib/tile/wizarddialog.py:144 pysollib/tk/colorsdialog.py:111 #: pysollib/tk/edittextdialog.py:82 pysollib/tk/fontsdialog.py:143 -#: pysollib/tk/fontsdialog.py:205 pysollib/tk/menubar.py:1159 -#: pysollib/tk/menubar.py:1161 pysollib/tk/playeroptionsdialog.py:85 +#: pysollib/tk/fontsdialog.py:205 pysollib/tk/menubar.py:1156 +#: pysollib/tk/menubar.py:1158 pysollib/tk/playeroptionsdialog.py:85 #: pysollib/tk/playeroptionsdialog.py:160 pysollib/tk/selectcardset.py:241 -#: pysollib/tk/selectgame.py:266 pysollib/tk/selectgame.py:407 +#: pysollib/tk/selectgame.py:265 pysollib/tk/selectgame.py:406 #: pysollib/tk/selecttile.py:159 pysollib/tk/soundoptionsdialog.py:170 #: pysollib/tk/timeoutsdialog.py:92 pysollib/tk/tkwidget.py:324 -#: pysollib/tk/wizarddialog.py:136 +#: pysollib/tk/wizarddialog.py:137 msgid "&Cancel" msgstr "" -#: pysollib/actions.py:336 +#: pysollib/actions.py:335 msgid "Select random game" msgstr "" -#: pysollib/actions.py:372 +#: pysollib/actions.py:371 msgid "Select next game" msgstr "" -#: pysollib/actions.py:405 pysollib/tile/toolbar.py:203 -#: pysollib/tk/toolbar.py:206 +#: pysollib/actions.py:404 pysollib/tile/toolbar.py:200 +#: pysollib/tk/toolbar.py:203 msgid "Quit " msgstr "" -#: pysollib/actions.py:456 +#: pysollib/actions.py:455 msgid "Clear bookmarks" msgstr "" -#: pysollib/actions.py:457 +#: pysollib/actions.py:456 msgid "Clear all bookmarks ?" msgstr "" -#: pysollib/actions.py:467 +#: pysollib/actions.py:466 msgid "Restart game" msgstr "" -#: pysollib/actions.py:468 +#: pysollib/actions.py:467 msgid "Restart this game ?" msgstr "" -#: pysollib/actions.py:514 +#: pysollib/actions.py:513 msgid "" "Comments for %s:\n" "\n" msgstr "" -#: pysollib/actions.py:516 +#: pysollib/actions.py:515 msgid "Comments for " msgstr "" -#: pysollib/actions.py:534 pysollib/actions.py:562 +#: pysollib/actions.py:533 pysollib/actions.py:561 msgid "Error while writing to file" msgstr "" -#: pysollib/actions.py:537 pysollib/actions.py:565 +#: pysollib/actions.py:536 pysollib/actions.py:564 msgid " Info" msgstr "" -#: pysollib/actions.py:538 +#: pysollib/actions.py:537 msgid "" "Comments were appended to\n" "\n" msgstr "" -#: pysollib/actions.py:549 +#: pysollib/actions.py:548 msgid "Demo statistics" msgstr "" -#: pysollib/actions.py:552 +#: pysollib/actions.py:551 msgid "Your statistics" msgstr "" -#: pysollib/actions.py:566 +#: pysollib/actions.py:565 msgid "" " were appended to\n" "\n" msgstr "" -#: pysollib/actions.py:581 +#: pysollib/actions.py:580 msgid " Demo" msgstr "" -#: pysollib/actions.py:581 +#: pysollib/actions.py:580 msgid " Demo " msgstr "" -#: pysollib/actions.py:584 pysollib/actions.py:604 +#: pysollib/actions.py:583 pysollib/actions.py:603 msgid " for " msgstr "" -#: pysollib/actions.py:590 pysollib/stats.py:205 +#: pysollib/actions.py:589 pysollib/stats.py:205 msgid "Statistics for " msgstr "" -#: pysollib/actions.py:594 pysollib/tile/selectgame.py:345 -#: pysollib/tile/tkstats.py:76 pysollib/tile/toolbar.py:200 -#: pysollib/tk/selectgame.py:350 pysollib/tk/toolbar.py:203 +#: pysollib/actions.py:593 pysollib/tile/selectgame.py:344 +#: pysollib/tile/tkstats.py:74 pysollib/tile/toolbar.py:197 +#: pysollib/tk/selectgame.py:349 pysollib/tk/toolbar.py:200 msgid "Statistics" msgstr "" -#: pysollib/actions.py:598 pysollib/tile/tkstats.py:528 +#: pysollib/actions.py:597 pysollib/tile/tkstats.py:526 #: data/glade-translations:31 msgid "Full log" msgstr "" -#: pysollib/actions.py:601 pysollib/tile/tkstats.py:532 +#: pysollib/actions.py:600 pysollib/tile/tkstats.py:530 #: data/glade-translations:32 msgid "Session log" msgstr "" -#: pysollib/actions.py:607 +#: pysollib/actions.py:606 msgid "Game Info" msgstr "" -#: pysollib/actions.py:610 +#: pysollib/actions.py:609 msgid "Statistics progression" msgstr "" -#: pysollib/actions.py:626 +#: pysollib/actions.py:625 msgid "Reset all statistics" msgstr "" -#: pysollib/actions.py:627 +#: pysollib/actions.py:626 msgid "" "Reset ALL statistics and logs for player\n" "%s ?" msgstr "" -#: pysollib/actions.py:633 +#: pysollib/actions.py:632 msgid "Reset game statistics" msgstr "" -#: pysollib/actions.py:634 +#: pysollib/actions.py:633 msgid "" "Reset statistics and logs for player\n" "%s\n" @@ -248,57 +248,57 @@ msgid "" "%s ?" msgstr "" -#: pysollib/actions.py:690 +#: pysollib/actions.py:689 msgid "Play demo" msgstr "" -#: pysollib/actions.py:701 +#: pysollib/actions.py:700 msgid "Set player options" msgstr "" -#: pysollib/actions.py:715 data/glade-translations:40 +#: pysollib/actions.py:714 data/glade-translations:40 msgid "Set colors" msgstr "" -#: pysollib/actions.py:732 +#: pysollib/actions.py:731 msgid "Set fonts" msgstr "" -#: pysollib/actions.py:741 data/glade-translations:33 +#: pysollib/actions.py:740 data/glade-translations:33 msgid "Set timeouts" msgstr "" -#: pysollib/app.py:90 +#: pysollib/app.py:89 msgid "Unknown" msgstr "" -#: pysollib/app.py:667 +#: pysollib/app.py:666 msgid "can't find game: " msgstr "" -#: pysollib/app.py:906 pysollib/game.py:1694 pysollib/game.py:1710 -#: pysollib/game.py:1717 pysollib/game.py:1723 pysollib/tile/menubar.py:359 -#: pysollib/tk/menubar.py:356 +#: pysollib/app.py:905 pysollib/game.py:1694 pysollib/game.py:1710 +#: pysollib/game.py:1717 pysollib/game.py:1723 pysollib/tile/menubar.py:356 +#: pysollib/tk/menubar.py:353 msgid "&New game" msgstr "" -#: pysollib/app.py:1049 +#: pysollib/app.py:1048 msgid "Loading %s %s..." msgstr "" -#: pysollib/app.py:1088 +#: pysollib/app.py:1087 msgid " load error" msgstr "" -#: pysollib/app.py:1089 +#: pysollib/app.py:1088 msgid "Error while loading " msgstr "" -#: pysollib/app.py:1183 +#: pysollib/app.py:1182 msgid "Incompatible " msgstr "" -#: pysollib/app.py:1185 +#: pysollib/app.py:1184 msgid "" "The currently selected %s %s\n" "is not compatible with the game\n" @@ -307,11 +307,11 @@ msgid "" "Please select a %s type %s.\n" msgstr "" -#: pysollib/app.py:1201 +#: pysollib/app.py:1200 msgid "Please select a %s type %s" msgstr "" -#: pysollib/app.py:1428 +#: pysollib/app.py:1427 msgid "error loading plugin %s: %s" msgstr "" @@ -483,8 +483,8 @@ msgid "" "Please report this bug." msgstr "" -#: pysollib/game.py:2861 pysollib/tile/menubar.py:1394 -#: pysollib/tk/menubar.py:1379 +#: pysollib/game.py:2861 pysollib/tile/menubar.py:1391 +#: pysollib/tk/menubar.py:1376 msgid "Save game error" msgstr "" @@ -509,212 +509,211 @@ msgid "" "in the current implementation." msgstr "" -#: pysollib/gamedb.py:122 +#: pysollib/gamedb.py:120 msgid "Baker's Dozen" msgstr "" -#: pysollib/gamedb.py:123 +#: pysollib/gamedb.py:121 msgid "Beleaguered Castle" msgstr "" -#: pysollib/gamedb.py:124 +#: pysollib/gamedb.py:122 msgid "Canfield" msgstr "" -#: pysollib/gamedb.py:125 +#: pysollib/gamedb.py:123 msgid "Fan" msgstr "" -#: pysollib/gamedb.py:126 +#: pysollib/gamedb.py:124 msgid "Forty Thieves" msgstr "" -#: pysollib/gamedb.py:127 pysollib/wizardutil.py:100 -#: pysollib/wizardutil.py:105 +#: pysollib/gamedb.py:125 pysollib/wizardutil.py:98 pysollib/wizardutil.py:103 msgid "FreeCell" msgstr "" -#: pysollib/gamedb.py:128 +#: pysollib/gamedb.py:126 msgid "Golf" msgstr "" -#: pysollib/gamedb.py:129 pysollib/wizardutil.py:102 +#: pysollib/gamedb.py:127 pysollib/wizardutil.py:100 msgid "Gypsy" msgstr "" -#: pysollib/gamedb.py:130 pysollib/wizardutil.py:101 +#: pysollib/gamedb.py:128 pysollib/wizardutil.py:99 msgid "Klondike" msgstr "" -#: pysollib/gamedb.py:131 +#: pysollib/gamedb.py:129 msgid "Montana" msgstr "" -#: pysollib/gamedb.py:132 +#: pysollib/gamedb.py:130 msgid "Napoleon" msgstr "" -#: pysollib/gamedb.py:133 +#: pysollib/gamedb.py:131 msgid "Numerica" msgstr "" -#: pysollib/gamedb.py:134 +#: pysollib/gamedb.py:132 msgid "Pairing" msgstr "" -#: pysollib/gamedb.py:135 +#: pysollib/gamedb.py:133 msgid "Raglan" msgstr "" -#: pysollib/gamedb.py:136 pysollib/gamedb.py:169 +#: pysollib/gamedb.py:134 pysollib/gamedb.py:167 msgid "Simple games" msgstr "" -#: pysollib/gamedb.py:137 pysollib/wizardutil.py:114 +#: pysollib/gamedb.py:135 pysollib/wizardutil.py:112 msgid "Spider" msgstr "" -#: pysollib/gamedb.py:138 +#: pysollib/gamedb.py:136 msgid "Terrace" msgstr "" -#: pysollib/gamedb.py:139 +#: pysollib/gamedb.py:137 msgid "Yukon" msgstr "" -#: pysollib/gamedb.py:140 pysollib/gamedb.py:173 +#: pysollib/gamedb.py:138 pysollib/gamedb.py:171 msgid "One-Deck games" msgstr "" -#: pysollib/gamedb.py:141 pysollib/gamedb.py:174 +#: pysollib/gamedb.py:139 pysollib/gamedb.py:172 msgid "Two-Deck games" msgstr "" -#: pysollib/gamedb.py:142 pysollib/gamedb.py:175 +#: pysollib/gamedb.py:140 pysollib/gamedb.py:173 msgid "Three-Deck games" msgstr "" -#: pysollib/gamedb.py:143 pysollib/gamedb.py:176 +#: pysollib/gamedb.py:141 pysollib/gamedb.py:174 msgid "Four-Deck games" msgstr "" -#: pysollib/gamedb.py:155 +#: pysollib/gamedb.py:153 msgid "Baker's Dozen type" msgstr "" -#: pysollib/gamedb.py:156 +#: pysollib/gamedb.py:154 msgid "Beleaguered Castle type" msgstr "" -#: pysollib/gamedb.py:157 +#: pysollib/gamedb.py:155 msgid "Canfield type" msgstr "" -#: pysollib/gamedb.py:158 +#: pysollib/gamedb.py:156 msgid "Fan type" msgstr "" -#: pysollib/gamedb.py:159 +#: pysollib/gamedb.py:157 msgid "Forty Thieves type" msgstr "" -#: pysollib/gamedb.py:160 +#: pysollib/gamedb.py:158 msgid "FreeCell type" msgstr "" -#: pysollib/gamedb.py:161 +#: pysollib/gamedb.py:159 msgid "Golf type" msgstr "" -#: pysollib/gamedb.py:162 +#: pysollib/gamedb.py:160 msgid "Gypsy type" msgstr "" -#: pysollib/gamedb.py:163 +#: pysollib/gamedb.py:161 msgid "Klondike type" msgstr "" -#: pysollib/gamedb.py:164 +#: pysollib/gamedb.py:162 msgid "Montana type" msgstr "" -#: pysollib/gamedb.py:165 +#: pysollib/gamedb.py:163 msgid "Napoleon type" msgstr "" -#: pysollib/gamedb.py:166 +#: pysollib/gamedb.py:164 msgid "Numerica type" msgstr "" -#: pysollib/gamedb.py:167 +#: pysollib/gamedb.py:165 msgid "Pairing type" msgstr "" -#: pysollib/gamedb.py:168 +#: pysollib/gamedb.py:166 msgid "Raglan type" msgstr "" -#: pysollib/gamedb.py:170 +#: pysollib/gamedb.py:168 msgid "Spider type" msgstr "" -#: pysollib/gamedb.py:171 +#: pysollib/gamedb.py:169 msgid "Terrace type" msgstr "" -#: pysollib/gamedb.py:172 +#: pysollib/gamedb.py:170 msgid "Yukon type" msgstr "" -#: pysollib/gamedb.py:180 pysollib/gamedb.py:188 +#: pysollib/gamedb.py:178 pysollib/gamedb.py:186 msgid "French type" msgstr "" -#: pysollib/gamedb.py:181 pysollib/gamedb.py:189 pysollib/gamedb.py:197 +#: pysollib/gamedb.py:179 pysollib/gamedb.py:187 pysollib/gamedb.py:195 msgid "Ganjifa type" msgstr "" -#: pysollib/gamedb.py:182 pysollib/gamedb.py:190 pysollib/gamedb.py:198 +#: pysollib/gamedb.py:180 pysollib/gamedb.py:188 pysollib/gamedb.py:196 msgid "Hanafuda type" msgstr "" -#: pysollib/gamedb.py:183 pysollib/gamedb.py:191 pysollib/gamedb.py:205 +#: pysollib/gamedb.py:181 pysollib/gamedb.py:189 pysollib/gamedb.py:203 msgid "Hex A Deck type" msgstr "" -#: pysollib/gamedb.py:184 pysollib/gamedb.py:192 pysollib/gamedb.py:210 +#: pysollib/gamedb.py:182 pysollib/gamedb.py:190 pysollib/gamedb.py:208 msgid "Tarock type" msgstr "" -#: pysollib/gamedb.py:196 +#: pysollib/gamedb.py:194 msgid "Dashavatara Ganjifa type" msgstr "" -#: pysollib/gamedb.py:199 +#: pysollib/gamedb.py:197 msgid "Mughal Ganjifa type" msgstr "" -#: pysollib/gamedb.py:200 +#: pysollib/gamedb.py:198 msgid "Navagraha Ganjifa type" msgstr "" -#: pysollib/gamedb.py:204 +#: pysollib/gamedb.py:202 msgid "Shisen-Sho" msgstr "" -#: pysollib/gamedb.py:206 +#: pysollib/gamedb.py:204 msgid "Matrix type" msgstr "" -#: pysollib/gamedb.py:207 +#: pysollib/gamedb.py:205 msgid "Memory type" msgstr "" -#: pysollib/gamedb.py:208 +#: pysollib/gamedb.py:206 msgid "Poker type" msgstr "" -#: pysollib/gamedb.py:209 +#: pysollib/gamedb.py:207 msgid "Puzzle type" msgstr "" @@ -752,8 +751,8 @@ msgid "" msgstr "" #: pysollib/games/canfield.py:528 pysollib/games/special/tarock.py:224 -#: pysollib/stack.py:1514 pysollib/util.py:85 pysollib/wizardutil.py:160 -#: pysollib/wizardutil.py:225 +#: pysollib/stack.py:1514 pysollib/util.py:85 pysollib/wizardutil.py:158 +#: pysollib/wizardutil.py:223 msgid "King" msgstr "" @@ -783,12 +782,12 @@ msgid "Waste. Build up or down regardless of suit." msgstr "" #: pysollib/games/golf.py:117 pysollib/games/golf.py:305 -#: pysollib/stack.py:2268 +#: pysollib/stack.py:2269 msgid "Tableau. No building." msgstr "" #: pysollib/games/golf.py:390 pysollib/games/pileon.py:257 -#: pysollib/stack.py:2157 +#: pysollib/stack.py:2158 msgid "Foundation. Build up regardless of suit." msgstr "" @@ -856,7 +855,7 @@ msgid "Deal %d" msgstr "" #: pysollib/games/numerica.py:263 pysollib/games/royalcotillion.py:865 -#: pysollib/stack.py:2200 +#: pysollib/stack.py:2201 msgid "Foundation. Build up by color." msgstr "" @@ -914,8 +913,8 @@ msgstr "" #: pysollib/games/special/tarock.py:223 #: pysollib/games/ultra/dashavatara.py:351 #: pysollib/games/ultra/hexadeck.py:273 pysollib/games/ultra/mughal.py:254 -#: pysollib/stack.py:1515 pysollib/util.py:84 pysollib/wizardutil.py:159 -#: pysollib/wizardutil.py:163 pysollib/wizardutil.py:224 +#: pysollib/stack.py:1515 pysollib/util.py:84 pysollib/wizardutil.py:157 +#: pysollib/wizardutil.py:161 pysollib/wizardutil.py:222 msgid "Ace" msgstr "" @@ -1184,7 +1183,7 @@ msgstr "" msgid "Stores" msgstr "" -#: pysollib/games/ultra/mughal.py:253 pysollib/wizardutil.py:103 +#: pysollib/games/ultra/mughal.py:253 pysollib/wizardutil.py:101 msgid "Harp" msgstr "" @@ -1316,8 +1315,8 @@ msgid "" "Please check your %s installation.\n" msgstr "" -#: pysollib/main.py:73 pysollib/main.py:266 pysollib/tile/menubar.py:379 -#: pysollib/tk/menubar.py:376 +#: pysollib/main.py:73 pysollib/main.py:266 pysollib/tile/menubar.py:376 +#: pysollib/tk/menubar.py:373 msgid "&Quit" msgstr "" @@ -1373,267 +1372,267 @@ msgstr "" msgid "Welcome to %s" msgstr "" -#: pysollib/resource.py:192 +#: pysollib/resource.py:191 msgid "French type (52 cards)" msgstr "" -#: pysollib/resource.py:193 +#: pysollib/resource.py:192 msgid "Hanafuda type (48 cards)" msgstr "" -#: pysollib/resource.py:194 +#: pysollib/resource.py:193 msgid "Tarock type (78 cards)" msgstr "" -#: pysollib/resource.py:195 +#: pysollib/resource.py:194 msgid "Mahjongg type (42 tiles)" msgstr "" -#: pysollib/resource.py:196 +#: pysollib/resource.py:195 msgid "Hex A Deck type (68 cards)" msgstr "" -#: pysollib/resource.py:197 +#: pysollib/resource.py:196 msgid "Mughal Ganjifa type (96 cards)" msgstr "" -#: pysollib/resource.py:198 +#: pysollib/resource.py:197 msgid "Navagraha Ganjifa type (108 cards)" msgstr "" -#: pysollib/resource.py:199 +#: pysollib/resource.py:198 msgid "Dashavatara Ganjifa type (120 cards)" msgstr "" -#: pysollib/resource.py:200 +#: pysollib/resource.py:199 msgid "Trumps only type (variable cards)" msgstr "" -#: pysollib/resource.py:204 +#: pysollib/resource.py:203 msgid "French" msgstr "" -#: pysollib/resource.py:205 pysollib/resource.py:229 +#: pysollib/resource.py:204 pysollib/resource.py:228 msgid "Hanafuda" msgstr "" -#: pysollib/resource.py:206 pysollib/resource.py:245 +#: pysollib/resource.py:205 pysollib/resource.py:244 msgid "Tarock" msgstr "" -#: pysollib/resource.py:207 pysollib/resource.py:232 +#: pysollib/resource.py:206 pysollib/resource.py:231 msgid "Mahjongg" msgstr "" -#: pysollib/resource.py:208 pysollib/resource.py:230 +#: pysollib/resource.py:207 pysollib/resource.py:229 msgid "Hex A Deck" msgstr "" -#: pysollib/resource.py:209 +#: pysollib/resource.py:208 msgid "Mughal Ganjifa" msgstr "" -#: pysollib/resource.py:210 +#: pysollib/resource.py:209 msgid "Navagraha Ganjifa" msgstr "" -#: pysollib/resource.py:211 +#: pysollib/resource.py:210 msgid "Dashavatara Ganjifa" msgstr "" -#: pysollib/resource.py:212 +#: pysollib/resource.py:211 msgid "Trumps only" msgstr "" -#: pysollib/resource.py:217 +#: pysollib/resource.py:216 msgid "Adult" msgstr "" -#: pysollib/resource.py:218 +#: pysollib/resource.py:217 msgid "Animals" msgstr "" -#: pysollib/resource.py:219 +#: pysollib/resource.py:218 msgid "Anime" msgstr "" -#: pysollib/resource.py:220 +#: pysollib/resource.py:219 msgid "Art" msgstr "" -#: pysollib/resource.py:221 +#: pysollib/resource.py:220 msgid "Cartoons" msgstr "" -#: pysollib/resource.py:222 +#: pysollib/resource.py:221 msgid "Children" msgstr "" -#: pysollib/resource.py:223 +#: pysollib/resource.py:222 msgid "Classic look" msgstr "" -#: pysollib/resource.py:224 +#: pysollib/resource.py:223 msgid "Collectors" msgstr "" -#: pysollib/resource.py:225 +#: pysollib/resource.py:224 msgid "Computers" msgstr "" -#: pysollib/resource.py:226 +#: pysollib/resource.py:225 msgid "Engines" msgstr "" -#: pysollib/resource.py:227 +#: pysollib/resource.py:226 msgid "Fantasy" msgstr "" -#: pysollib/resource.py:228 +#: pysollib/resource.py:227 msgid "Ganjifa" msgstr "" -#: pysollib/resource.py:231 +#: pysollib/resource.py:230 msgid "Holiday" msgstr "" -#: pysollib/resource.py:233 +#: pysollib/resource.py:232 msgid "Movies" msgstr "" -#: pysollib/resource.py:234 +#: pysollib/resource.py:233 msgid "Matrix" msgstr "" -#: pysollib/resource.py:235 +#: pysollib/resource.py:234 msgid "Music" msgstr "" -#: pysollib/resource.py:236 +#: pysollib/resource.py:235 msgid "Nature" msgstr "" -#: pysollib/resource.py:237 +#: pysollib/resource.py:236 msgid "Operating Systems" msgstr "" -#: pysollib/resource.py:238 +#: pysollib/resource.py:237 msgid "People" msgstr "" -#: pysollib/resource.py:239 +#: pysollib/resource.py:238 msgid "Places" msgstr "" -#: pysollib/resource.py:240 +#: pysollib/resource.py:239 msgid "Plain" msgstr "" -#: pysollib/resource.py:241 +#: pysollib/resource.py:240 msgid "Products" msgstr "" -#: pysollib/resource.py:242 +#: pysollib/resource.py:241 msgid "Round cardsets" msgstr "" -#: pysollib/resource.py:243 +#: pysollib/resource.py:242 msgid "Science Fiction" msgstr "" -#: pysollib/resource.py:244 +#: pysollib/resource.py:243 msgid "Sports" msgstr "" -#: pysollib/resource.py:246 +#: pysollib/resource.py:245 msgid "Vehicels" msgstr "" -#: pysollib/resource.py:247 +#: pysollib/resource.py:246 msgid "Video Games" msgstr "" -#: pysollib/resource.py:252 +#: pysollib/resource.py:251 msgid "Australia" msgstr "" -#: pysollib/resource.py:253 +#: pysollib/resource.py:252 msgid "Austria" msgstr "" -#: pysollib/resource.py:254 +#: pysollib/resource.py:253 msgid "Belgium" msgstr "" -#: pysollib/resource.py:255 +#: pysollib/resource.py:254 msgid "Canada" msgstr "" -#: pysollib/resource.py:256 +#: pysollib/resource.py:255 msgid "China" msgstr "" -#: pysollib/resource.py:257 +#: pysollib/resource.py:256 msgid "Czech Republic" msgstr "" -#: pysollib/resource.py:258 +#: pysollib/resource.py:257 msgid "Denmark" msgstr "" -#: pysollib/resource.py:259 +#: pysollib/resource.py:258 msgid "England" msgstr "" -#: pysollib/resource.py:260 +#: pysollib/resource.py:259 msgid "France" msgstr "" -#: pysollib/resource.py:261 +#: pysollib/resource.py:260 msgid "Germany" msgstr "" -#: pysollib/resource.py:262 +#: pysollib/resource.py:261 msgid "Great Britain" msgstr "" -#: pysollib/resource.py:263 +#: pysollib/resource.py:262 msgid "Hungary" msgstr "" -#: pysollib/resource.py:264 +#: pysollib/resource.py:263 msgid "India" msgstr "" -#: pysollib/resource.py:265 +#: pysollib/resource.py:264 msgid "Italy" msgstr "" -#: pysollib/resource.py:266 +#: pysollib/resource.py:265 msgid "Japan" msgstr "" -#: pysollib/resource.py:267 +#: pysollib/resource.py:266 msgid "Netherlands" msgstr "" -#: pysollib/resource.py:268 +#: pysollib/resource.py:267 msgid "Russia" msgstr "" -#: pysollib/resource.py:269 +#: pysollib/resource.py:268 msgid "Spain" msgstr "" -#: pysollib/resource.py:270 +#: pysollib/resource.py:269 msgid "Sweden" msgstr "" -#: pysollib/resource.py:271 +#: pysollib/resource.py:270 msgid "Switzerland" msgstr "" -#: pysollib/resource.py:272 +#: pysollib/resource.py:271 msgid "USA" msgstr "" @@ -1657,17 +1656,15 @@ msgstr "" msgid "Jack" msgstr "" -#: pysollib/stack.py:1521 +#: pysollib/stack.py:1522 msgid "No cards" msgstr "" -#: pysollib/stack.py:1522 -msgid "1 card" -msgstr "" - #: pysollib/stack.py:1523 -msgid " cards" -msgstr "" +msgid "%d card" +msgid_plural "%d cards" +msgstr[0] "" +msgstr[1] "" #: pysollib/stack.py:1735 pysollib/stack.py:1737 pysollib/stack.py:1773 msgid "Redeal" @@ -1677,211 +1674,205 @@ msgstr "" msgid "Stop" msgstr "" -#: pysollib/stack.py:1798 +#: pysollib/stack.py:1799 msgid "Variable redeals." msgstr "" -#: pysollib/stack.py:1799 +#: pysollib/stack.py:1800 msgid "Unlimited redeals." msgstr "" -#: pysollib/stack.py:1800 -msgid "No redeals." -msgstr "" +#: pysollib/stack.py:1803 +msgid "%d readeal" +msgid_plural "%d redeals" +msgstr[0] "" +msgstr[1] "" -#: pysollib/stack.py:1801 -msgid "One redeal." -msgstr "" - -#: pysollib/stack.py:1802 -msgid " redeals." -msgstr "" - -#: pysollib/stack.py:1804 +#: pysollib/stack.py:1805 msgid "Talon." msgstr "" -#: pysollib/stack.py:2070 pysollib/stack.py:2717 +#: pysollib/stack.py:2071 pysollib/stack.py:2718 msgid "Reserve. No building." msgstr "" -#: pysollib/stack.py:2108 +#: pysollib/stack.py:2109 msgid "Foundation." msgstr "" -#: pysollib/stack.py:2146 +#: pysollib/stack.py:2147 msgid "Foundation. Build up by suit." msgstr "" -#: pysollib/stack.py:2147 +#: pysollib/stack.py:2148 msgid "Foundation. Build down by suit." msgstr "" -#: pysollib/stack.py:2148 pysollib/stack.py:2159 pysollib/stack.py:2181 -#: pysollib/stack.py:2202 +#: pysollib/stack.py:2149 pysollib/stack.py:2160 pysollib/stack.py:2182 +#: pysollib/stack.py:2203 msgid "Foundation. Build by same rank." msgstr "" -#: pysollib/stack.py:2158 +#: pysollib/stack.py:2159 msgid "Foundation. Build down regardless of suit." msgstr "" -#: pysollib/stack.py:2179 +#: pysollib/stack.py:2180 msgid "Foundation. Build up by alternate color." msgstr "" -#: pysollib/stack.py:2180 +#: pysollib/stack.py:2181 msgid "Foundation. Build down by alternate color." msgstr "" -#: pysollib/stack.py:2201 +#: pysollib/stack.py:2202 msgid "Foundation. Build down by color." msgstr "" -#: pysollib/stack.py:2310 +#: pysollib/stack.py:2311 msgid "Tableau. Build up by alternate color." msgstr "" -#: pysollib/stack.py:2311 +#: pysollib/stack.py:2312 msgid "Tableau. Build down by alternate color." msgstr "" -#: pysollib/stack.py:2312 pysollib/stack.py:2322 pysollib/stack.py:2331 -#: pysollib/stack.py:2340 pysollib/stack.py:2350 pysollib/stack.py:2379 -#: pysollib/stack.py:2389 +#: pysollib/stack.py:2313 pysollib/stack.py:2323 pysollib/stack.py:2332 +#: pysollib/stack.py:2341 pysollib/stack.py:2351 pysollib/stack.py:2380 +#: pysollib/stack.py:2390 msgid "Tableau. Build by same rank." msgstr "" -#: pysollib/stack.py:2320 +#: pysollib/stack.py:2321 msgid "Tableau. Build up by color." msgstr "" -#: pysollib/stack.py:2321 +#: pysollib/stack.py:2322 msgid "Tableau. Build down by color." msgstr "" -#: pysollib/stack.py:2329 +#: pysollib/stack.py:2330 msgid "Tableau. Build up by suit." msgstr "" -#: pysollib/stack.py:2330 +#: pysollib/stack.py:2331 msgid "Tableau. Build down by suit." msgstr "" -#: pysollib/stack.py:2338 +#: pysollib/stack.py:2339 msgid "Tableau. Build up regardless of suit." msgstr "" -#: pysollib/stack.py:2339 +#: pysollib/stack.py:2340 msgid "Tableau. Build down regardless of suit." msgstr "" -#: pysollib/stack.py:2348 +#: pysollib/stack.py:2349 msgid "Tableau. Build up in any suit but the same." msgstr "" -#: pysollib/stack.py:2349 +#: pysollib/stack.py:2350 msgid "Tableau. Build down in any suit but the same." msgstr "" -#: pysollib/stack.py:2377 +#: pysollib/stack.py:2378 msgid "" "Tableau. Build up regardless of suit. Sequences of cards in alternate color " "can be moved as a unit." msgstr "" -#: pysollib/stack.py:2378 +#: pysollib/stack.py:2379 msgid "" "Tableau. Build down regardless of suit. Sequences of cards in alternate " "color can be moved as a unit." msgstr "" -#: pysollib/stack.py:2387 +#: pysollib/stack.py:2388 msgid "" "Tableau. Build up regardless of suit. Sequences of cards in the same suit " "can be moved as a unit." msgstr "" -#: pysollib/stack.py:2388 +#: pysollib/stack.py:2389 msgid "" "Tableau. Build down regardless of suit. Sequences of cards in the same suit " "can be moved as a unit." msgstr "" -#: pysollib/stack.py:2410 +#: pysollib/stack.py:2411 msgid "" "Tableau. Build up by alternate color, can move any face-up cards regardless " "of sequence." msgstr "" -#: pysollib/stack.py:2411 +#: pysollib/stack.py:2412 msgid "" "Tableau. Build down by alternate color, can move any face-up cards " "regardless of sequence." msgstr "" -#: pysollib/stack.py:2412 pysollib/stack.py:2425 pysollib/stack.py:2435 +#: pysollib/stack.py:2413 pysollib/stack.py:2426 pysollib/stack.py:2436 msgid "" "Tableau. Build by same rank, can move any face-up cards regardless of " "sequence." msgstr "" -#: pysollib/stack.py:2423 +#: pysollib/stack.py:2424 msgid "" "Tableau. Build up by suit, can move any face-up cards regardless of sequence." msgstr "" -#: pysollib/stack.py:2424 +#: pysollib/stack.py:2425 msgid "" "Tableau. Build down by suit, can move any face-up cards regardless of " "sequence." msgstr "" -#: pysollib/stack.py:2433 pysollib/stack.py:2434 +#: pysollib/stack.py:2434 pysollib/stack.py:2435 msgid "" "Tableau. Build up regardless of suit, can move any face-up cards regardless " "of sequence." msgstr "" -#: pysollib/stack.py:2467 +#: pysollib/stack.py:2468 msgid "Tableau. Build up or down by color." msgstr "" -#: pysollib/stack.py:2478 +#: pysollib/stack.py:2479 msgid "Tableau. Build up or down by alternate color." msgstr "" -#: pysollib/stack.py:2489 +#: pysollib/stack.py:2490 msgid "Tableau. Build up or down by suit." msgstr "" -#: pysollib/stack.py:2500 +#: pysollib/stack.py:2501 msgid "Tableau. Build up or down regardless of suit." msgstr "" -#: pysollib/stack.py:2601 +#: pysollib/stack.py:2602 msgid "Waste." msgstr "" -#: pysollib/stack.py:2718 +#: pysollib/stack.py:2719 msgid "Free cell." msgstr "" -#: pysollib/stats.py:52 pysollib/stats.py:118 pysollib/tile/tkstats.py:675 +#: pysollib/stats.py:52 pysollib/stats.py:118 pysollib/tile/tkstats.py:673 msgid "Game" msgstr "" -#: pysollib/stats.py:53 pysollib/tile/tkstats.py:906 -#: pysollib/tile/tkstats.py:979 pysollib/tile/tkstats.py:980 -#: pysollib/tk/tkstats.py:887 pysollib/tk/tkstats.py:888 -#: pysollib/tk/tkstats.py:941 +#: pysollib/stats.py:53 pysollib/tile/tkstats.py:904 +#: pysollib/tile/tkstats.py:977 pysollib/tile/tkstats.py:978 +#: pysollib/tk/tkstats.py:885 pysollib/tk/tkstats.py:886 +#: pysollib/tk/tkstats.py:939 msgid "Played" msgstr "" -#: pysollib/stats.py:54 pysollib/stats.py:157 pysollib/tile/tkstats.py:913 -#: pysollib/tile/tkstats.py:984 pysollib/tile/tkstats.py:985 -#: pysollib/tk/tkstats.py:892 pysollib/tk/tkstats.py:893 -#: pysollib/tk/tkstats.py:949 +#: pysollib/stats.py:54 pysollib/stats.py:157 pysollib/tile/tkstats.py:911 +#: pysollib/tile/tkstats.py:982 pysollib/tile/tkstats.py:983 +#: pysollib/tk/tkstats.py:890 pysollib/tk/tkstats.py:891 +#: pysollib/tk/tkstats.py:947 msgid "Won" msgstr "" @@ -1898,11 +1889,11 @@ msgstr "" msgid "Moves" msgstr "" -#: pysollib/stats.py:58 pysollib/tile/tkstats.py:920 -#: pysollib/tile/tkstats.py:952 pysollib/tile/tkstats.py:971 -#: pysollib/tile/tkstats.py:989 pysollib/tk/tkstats.py:860 -#: pysollib/tk/tkstats.py:879 pysollib/tk/tkstats.py:897 -#: pysollib/tk/tkstats.py:957 +#: pysollib/stats.py:58 pysollib/tile/tkstats.py:918 +#: pysollib/tile/tkstats.py:950 pysollib/tile/tkstats.py:969 +#: pysollib/tile/tkstats.py:987 pysollib/tk/tkstats.py:858 +#: pysollib/tk/tkstats.py:877 pysollib/tk/tkstats.py:895 +#: pysollib/tk/tkstats.py:955 msgid "% won" msgstr "" @@ -1911,17 +1902,17 @@ msgid "Status" msgstr "" #: pysollib/stats.py:118 pysollib/tile/statusbar.py:152 -#: pysollib/tile/tkstats.py:678 pysollib/tk/statusbar.py:163 -#: pysollib/tk/tkstats.py:671 +#: pysollib/tile/tkstats.py:676 pysollib/tk/statusbar.py:163 +#: pysollib/tk/tkstats.py:669 msgid "Game number" msgstr "" -#: pysollib/stats.py:118 pysollib/tile/tkstats.py:681 -#: pysollib/tk/tkstats.py:674 +#: pysollib/stats.py:118 pysollib/tile/tkstats.py:679 +#: pysollib/tk/tkstats.py:672 msgid "Started at" msgstr "" -#: pysollib/stats.py:142 pysollib/tile/tkstats.py:697 +#: pysollib/stats.py:142 pysollib/tile/tkstats.py:695 msgid "** UNKNOWN %d **" msgstr "" @@ -1945,8 +1936,8 @@ msgstr "" msgid "Demo" msgstr "" -#: pysollib/stats.py:215 pysollib/tile/tkstats.py:386 -#: pysollib/tk/tkstats.py:422 +#: pysollib/stats.py:215 pysollib/tile/tkstats.py:384 +#: pysollib/tk/tkstats.py:420 msgid "Total (%d out of %d games)" msgstr "" @@ -2076,552 +2067,552 @@ msgstr "" msgid "Select font" msgstr "" -#: pysollib/tile/menubar.py:82 pysollib/tk/menubar.py:80 +#: pysollib/tile/menubar.py:79 pysollib/tk/menubar.py:77 msgid "Style" msgstr "" -#: pysollib/tile/menubar.py:90 pysollib/tk/menubar.py:89 +#: pysollib/tile/menubar.py:87 pysollib/tk/menubar.py:86 msgid "Compound" msgstr "" -#: pysollib/tile/menubar.py:96 pysollib/tk/menubar.py:95 +#: pysollib/tile/menubar.py:93 pysollib/tk/menubar.py:92 msgid "Hide" msgstr "" -#: pysollib/tile/menubar.py:99 pysollib/tk/menubar.py:98 +#: pysollib/tile/menubar.py:96 pysollib/tk/menubar.py:95 msgid "Top" msgstr "" -#: pysollib/tile/menubar.py:102 pysollib/tk/menubar.py:101 +#: pysollib/tile/menubar.py:99 pysollib/tk/menubar.py:98 msgid "Bottom" msgstr "" -#: pysollib/tile/menubar.py:105 pysollib/tk/menubar.py:104 +#: pysollib/tile/menubar.py:102 pysollib/tk/menubar.py:101 msgid "Left" msgstr "" -#: pysollib/tile/menubar.py:108 pysollib/tk/menubar.py:107 +#: pysollib/tile/menubar.py:105 pysollib/tk/menubar.py:104 msgid "Right" msgstr "" -#: pysollib/tile/menubar.py:112 pysollib/tk/menubar.py:111 +#: pysollib/tile/menubar.py:109 pysollib/tk/menubar.py:108 msgid "Small icons" msgstr "" -#: pysollib/tile/menubar.py:115 pysollib/tk/menubar.py:114 +#: pysollib/tile/menubar.py:112 pysollib/tk/menubar.py:111 msgid "Large icons" msgstr "" -#: pysollib/tile/menubar.py:121 pysollib/tk/menubar.py:120 +#: pysollib/tile/menubar.py:118 pysollib/tk/menubar.py:117 msgid "Visible buttons" msgstr "" -#: pysollib/tile/menubar.py:356 pysollib/tile/menubar.py:525 -#: pysollib/tk/menubar.py:353 pysollib/tk/menubar.py:529 +#: pysollib/tile/menubar.py:353 pysollib/tile/menubar.py:522 +#: pysollib/tk/menubar.py:350 pysollib/tk/menubar.py:526 msgid "&About " msgstr "" -#: pysollib/tile/menubar.py:358 pysollib/tk/menubar.py:355 +#: pysollib/tile/menubar.py:355 pysollib/tk/menubar.py:352 msgid "&File" msgstr "" -#: pysollib/tile/menubar.py:360 pysollib/tk/menubar.py:357 +#: pysollib/tile/menubar.py:357 pysollib/tk/menubar.py:354 msgid "R&ecent games" msgstr "" -#: pysollib/tile/menubar.py:362 pysollib/tk/menubar.py:359 +#: pysollib/tile/menubar.py:359 pysollib/tk/menubar.py:356 msgid "Select &random game" msgstr "" -#: pysollib/tile/menubar.py:363 pysollib/tk/menubar.py:360 +#: pysollib/tile/menubar.py:360 pysollib/tk/menubar.py:357 msgid "&All games" msgstr "" -#: pysollib/tile/menubar.py:364 pysollib/tk/menubar.py:361 +#: pysollib/tile/menubar.py:361 pysollib/tk/menubar.py:358 msgid "Games played and &won" msgstr "" -#: pysollib/tile/menubar.py:365 pysollib/tk/menubar.py:362 +#: pysollib/tile/menubar.py:362 pysollib/tk/menubar.py:359 msgid "Games played and ¬ won" msgstr "" -#: pysollib/tile/menubar.py:366 pysollib/tk/menubar.py:363 +#: pysollib/tile/menubar.py:363 pysollib/tk/menubar.py:360 msgid "Games not &played" msgstr "" -#: pysollib/tile/menubar.py:367 pysollib/tk/menubar.py:364 +#: pysollib/tile/menubar.py:364 pysollib/tk/menubar.py:361 msgid "Select game by nu&mber..." msgstr "" -#: pysollib/tile/menubar.py:369 pysollib/tk/menubar.py:366 +#: pysollib/tile/menubar.py:366 pysollib/tk/menubar.py:363 msgid "Fa&vorite games" msgstr "" -#: pysollib/tile/menubar.py:370 pysollib/tk/menubar.py:367 +#: pysollib/tile/menubar.py:367 pysollib/tk/menubar.py:364 msgid "A&dd to favorites" msgstr "" -#: pysollib/tile/menubar.py:371 pysollib/tk/menubar.py:368 +#: pysollib/tile/menubar.py:368 pysollib/tk/menubar.py:365 msgid "Remove &from favorites" msgstr "" -#: pysollib/tile/menubar.py:373 pysollib/tk/menubar.py:370 +#: pysollib/tile/menubar.py:370 pysollib/tk/menubar.py:367 msgid "&Open..." msgstr "" -#: pysollib/tile/menubar.py:374 pysollib/tk/menubar.py:371 +#: pysollib/tile/menubar.py:371 pysollib/tk/menubar.py:368 msgid "&Save" msgstr "" -#: pysollib/tile/menubar.py:375 pysollib/tk/menubar.py:372 +#: pysollib/tile/menubar.py:372 pysollib/tk/menubar.py:369 msgid "Save &as..." msgstr "" -#: pysollib/tile/menubar.py:377 pysollib/tk/menubar.py:374 +#: pysollib/tile/menubar.py:374 pysollib/tk/menubar.py:371 msgid "&Hold and quit" msgstr "" -#: pysollib/tile/menubar.py:383 pysollib/tile/selectgame.py:398 -#: pysollib/tk/menubar.py:380 pysollib/tk/selectgame.py:407 +#: pysollib/tile/menubar.py:380 pysollib/tile/selectgame.py:397 +#: pysollib/tk/menubar.py:377 pysollib/tk/selectgame.py:406 msgid "&Select" msgstr "" -#: pysollib/tile/menubar.py:388 pysollib/tk/menubar.py:385 +#: pysollib/tile/menubar.py:385 pysollib/tk/menubar.py:382 msgid "&Edit" msgstr "" -#: pysollib/tile/menubar.py:389 pysollib/tk/menubar.py:386 +#: pysollib/tile/menubar.py:386 pysollib/tk/menubar.py:383 msgid "&Undo" msgstr "" -#: pysollib/tile/menubar.py:390 pysollib/tk/menubar.py:387 +#: pysollib/tile/menubar.py:387 pysollib/tk/menubar.py:384 msgid "&Redo" msgstr "" -#: pysollib/tile/menubar.py:391 pysollib/tk/menubar.py:388 +#: pysollib/tile/menubar.py:388 pysollib/tk/menubar.py:385 msgid "Redo &all" msgstr "" -#: pysollib/tile/menubar.py:394 pysollib/tk/menubar.py:391 +#: pysollib/tile/menubar.py:391 pysollib/tk/menubar.py:388 msgid "&Set bookmark" msgstr "" -#: pysollib/tile/menubar.py:396 pysollib/tile/menubar.py:400 -#: pysollib/tk/menubar.py:393 pysollib/tk/menubar.py:397 +#: pysollib/tile/menubar.py:393 pysollib/tile/menubar.py:397 +#: pysollib/tk/menubar.py:390 pysollib/tk/menubar.py:394 msgid "Bookmark %d" msgstr "" -#: pysollib/tile/menubar.py:398 pysollib/tk/menubar.py:395 +#: pysollib/tile/menubar.py:395 pysollib/tk/menubar.py:392 msgid "Go&to bookmark" msgstr "" -#: pysollib/tile/menubar.py:403 pysollib/tk/menubar.py:400 +#: pysollib/tile/menubar.py:400 pysollib/tk/menubar.py:397 msgid "&Clear bookmarks" msgstr "" -#: pysollib/tile/menubar.py:406 pysollib/tile/toolbar.py:190 -#: pysollib/tk/menubar.py:403 pysollib/tk/toolbar.py:193 +#: pysollib/tile/menubar.py:403 pysollib/tile/toolbar.py:187 +#: pysollib/tk/menubar.py:400 pysollib/tk/toolbar.py:190 msgid "Restart" msgstr "" -#: pysollib/tile/menubar.py:409 pysollib/tk/menubar.py:406 +#: pysollib/tile/menubar.py:406 pysollib/tk/menubar.py:403 msgid "Solitaire &Wizard" msgstr "" -#: pysollib/tile/menubar.py:410 pysollib/tk/menubar.py:407 +#: pysollib/tile/menubar.py:407 pysollib/tk/menubar.py:404 msgid "&Edit current game" msgstr "" -#: pysollib/tile/menubar.py:412 pysollib/tk/menubar.py:409 +#: pysollib/tile/menubar.py:409 pysollib/tk/menubar.py:406 msgid "&Game" msgstr "" -#: pysollib/tile/menubar.py:413 pysollib/tk/menubar.py:410 +#: pysollib/tile/menubar.py:410 pysollib/tk/menubar.py:407 msgid "&Deal cards" msgstr "" -#: pysollib/tile/menubar.py:414 pysollib/tk/menubar.py:411 +#: pysollib/tile/menubar.py:411 pysollib/tk/menubar.py:408 msgid "&Auto drop" msgstr "" -#: pysollib/tile/menubar.py:415 pysollib/tk/menubar.py:412 +#: pysollib/tile/menubar.py:412 pysollib/tk/menubar.py:409 msgid "&Pause" msgstr "" -#: pysollib/tile/menubar.py:418 pysollib/tk/menubar.py:415 +#: pysollib/tile/menubar.py:415 pysollib/tk/menubar.py:412 msgid "S&tatus..." msgstr "" -#: pysollib/tile/menubar.py:419 pysollib/tk/menubar.py:416 +#: pysollib/tile/menubar.py:416 pysollib/tk/menubar.py:413 msgid "&Comments..." msgstr "" -#: pysollib/tile/menubar.py:421 pysollib/tile/tkstats.py:646 -#: pysollib/tk/tkstats.py:642 +#: pysollib/tile/menubar.py:418 pysollib/tile/tkstats.py:644 +#: pysollib/tk/tkstats.py:640 msgid "&Statistics..." msgstr "" -#: pysollib/tile/menubar.py:422 +#: pysollib/tile/menubar.py:419 msgid "Log..." msgstr "" -#: pysollib/tile/menubar.py:424 pysollib/tk/menubar.py:427 +#: pysollib/tile/menubar.py:421 pysollib/tk/menubar.py:424 msgid "D&emo statistics" msgstr "" -#: pysollib/tile/menubar.py:426 pysollib/tk/menubar.py:431 +#: pysollib/tile/menubar.py:423 pysollib/tk/menubar.py:428 msgid "&Assist" msgstr "" -#: pysollib/tile/menubar.py:427 pysollib/tk/menubar.py:432 +#: pysollib/tile/menubar.py:424 pysollib/tk/menubar.py:429 msgid "&Hint" msgstr "" -#: pysollib/tile/menubar.py:428 pysollib/tk/menubar.py:433 +#: pysollib/tile/menubar.py:425 pysollib/tk/menubar.py:430 msgid "Highlight p&iles" msgstr "" -#: pysollib/tile/menubar.py:429 pysollib/tk/menubar.py:434 +#: pysollib/tile/menubar.py:426 pysollib/tk/menubar.py:431 msgid "&Find card" msgstr "" -#: pysollib/tile/menubar.py:431 pysollib/tk/menubar.py:436 +#: pysollib/tile/menubar.py:428 pysollib/tk/menubar.py:433 msgid "&Demo" msgstr "" -#: pysollib/tile/menubar.py:432 pysollib/tk/menubar.py:437 +#: pysollib/tile/menubar.py:429 pysollib/tk/menubar.py:434 msgid "Demo (&all games)" msgstr "" -#: pysollib/tile/menubar.py:434 pysollib/tile/menubar.py:436 -#: pysollib/tk/menubar.py:439 pysollib/tk/menubar.py:441 +#: pysollib/tile/menubar.py:431 pysollib/tile/menubar.py:433 +#: pysollib/tk/menubar.py:436 pysollib/tk/menubar.py:438 msgid "&Solver (experimental)" msgstr "" -#: pysollib/tile/menubar.py:438 pysollib/tk/menubar.py:443 +#: pysollib/tile/menubar.py:435 pysollib/tk/menubar.py:440 msgid "&Piles description" msgstr "" -#: pysollib/tile/menubar.py:442 pysollib/tk/menubar.py:447 +#: pysollib/tile/menubar.py:439 pysollib/tk/menubar.py:444 msgid "&Options" msgstr "" -#: pysollib/tile/menubar.py:443 pysollib/tk/menubar.py:448 +#: pysollib/tile/menubar.py:440 pysollib/tk/menubar.py:445 msgid "&Player options..." msgstr "" -#: pysollib/tile/menubar.py:444 pysollib/tk/menubar.py:449 +#: pysollib/tile/menubar.py:441 pysollib/tk/menubar.py:446 msgid "&Automatic play" msgstr "" -#: pysollib/tile/menubar.py:445 pysollib/tk/menubar.py:450 +#: pysollib/tile/menubar.py:442 pysollib/tk/menubar.py:447 msgid "Auto &face up" msgstr "" -#: pysollib/tile/menubar.py:446 pysollib/tk/menubar.py:451 +#: pysollib/tile/menubar.py:443 pysollib/tk/menubar.py:448 msgid "A&uto drop" msgstr "" -#: pysollib/tile/menubar.py:447 pysollib/tk/menubar.py:452 +#: pysollib/tile/menubar.py:444 pysollib/tk/menubar.py:449 msgid "Auto &deal" msgstr "" -#: pysollib/tile/menubar.py:449 pysollib/tk/menubar.py:454 +#: pysollib/tile/menubar.py:446 pysollib/tk/menubar.py:451 msgid "&Quick play" msgstr "" -#: pysollib/tile/menubar.py:450 pysollib/tk/menubar.py:455 +#: pysollib/tile/menubar.py:447 pysollib/tk/menubar.py:452 msgid "Assist &level" msgstr "" -#: pysollib/tile/menubar.py:451 pysollib/tk/menubar.py:456 +#: pysollib/tile/menubar.py:448 pysollib/tk/menubar.py:453 msgid "Enable &undo" msgstr "" -#: pysollib/tile/menubar.py:452 pysollib/tk/menubar.py:457 +#: pysollib/tile/menubar.py:449 pysollib/tk/menubar.py:454 msgid "Enable &bookmarks" msgstr "" -#: pysollib/tile/menubar.py:453 pysollib/tk/menubar.py:458 +#: pysollib/tile/menubar.py:450 pysollib/tk/menubar.py:455 msgid "Enable &hint" msgstr "" -#: pysollib/tile/menubar.py:454 pysollib/tk/menubar.py:459 +#: pysollib/tile/menubar.py:451 pysollib/tk/menubar.py:456 msgid "Enable highlight p&iles" msgstr "" -#: pysollib/tile/menubar.py:455 pysollib/tk/menubar.py:460 +#: pysollib/tile/menubar.py:452 pysollib/tk/menubar.py:457 msgid "Enable highlight &cards" msgstr "" -#: pysollib/tile/menubar.py:456 pysollib/tk/menubar.py:461 +#: pysollib/tile/menubar.py:453 pysollib/tk/menubar.py:458 msgid "Enable highlight same &rank" msgstr "" -#: pysollib/tile/menubar.py:457 pysollib/tk/menubar.py:462 +#: pysollib/tile/menubar.py:454 pysollib/tk/menubar.py:459 msgid "Highlight &no matching" msgstr "" -#: pysollib/tile/menubar.py:459 pysollib/tk/menubar.py:464 +#: pysollib/tile/menubar.py:456 pysollib/tk/menubar.py:461 msgid "&Show removed tiles (in Mahjongg games)" msgstr "" -#: pysollib/tile/menubar.py:460 pysollib/tk/menubar.py:465 +#: pysollib/tile/menubar.py:457 pysollib/tk/menubar.py:462 msgid "Show hint &arrow (in Shisen-Sho games)" msgstr "" -#: pysollib/tile/menubar.py:462 pysollib/tk/menubar.py:467 +#: pysollib/tile/menubar.py:459 pysollib/tk/menubar.py:464 msgid "&Sound..." msgstr "" -#: pysollib/tile/menubar.py:470 pysollib/tk/menubar.py:475 +#: pysollib/tile/menubar.py:467 pysollib/tk/menubar.py:472 msgid "Cards&et..." msgstr "" -#: pysollib/tile/menubar.py:471 pysollib/tk/menubar.py:476 +#: pysollib/tile/menubar.py:468 pysollib/tk/menubar.py:473 msgid "Table t&ile..." msgstr "" -#: pysollib/tile/menubar.py:473 pysollib/tk/menubar.py:478 +#: pysollib/tile/menubar.py:470 pysollib/tk/menubar.py:475 msgid "Card &background" msgstr "" -#: pysollib/tile/menubar.py:474 pysollib/tk/menubar.py:479 +#: pysollib/tile/menubar.py:471 pysollib/tk/menubar.py:476 msgid "Card &view" msgstr "" -#: pysollib/tile/menubar.py:475 pysollib/tk/menubar.py:480 +#: pysollib/tile/menubar.py:472 pysollib/tk/menubar.py:477 msgid "Card shado&w" msgstr "" -#: pysollib/tile/menubar.py:476 pysollib/tk/menubar.py:481 +#: pysollib/tile/menubar.py:473 pysollib/tk/menubar.py:478 msgid "Shade &legal moves" msgstr "" -#: pysollib/tile/menubar.py:477 pysollib/tk/menubar.py:482 +#: pysollib/tile/menubar.py:474 pysollib/tk/menubar.py:479 msgid "&Negative cards bottom" msgstr "" -#: pysollib/tile/menubar.py:478 pysollib/tk/menubar.py:483 +#: pysollib/tile/menubar.py:475 pysollib/tk/menubar.py:480 msgid "Shrink face-down cards" msgstr "" -#: pysollib/tile/menubar.py:479 pysollib/tk/menubar.py:484 +#: pysollib/tile/menubar.py:476 pysollib/tk/menubar.py:481 msgid "Shade &filled stacks" msgstr "" -#: pysollib/tile/menubar.py:480 pysollib/tk/menubar.py:485 +#: pysollib/tile/menubar.py:477 pysollib/tk/menubar.py:482 msgid "A&nimations" msgstr "" -#: pysollib/tile/menubar.py:481 pysollib/tk/menubar.py:486 +#: pysollib/tile/menubar.py:478 pysollib/tk/menubar.py:483 msgid "&None" msgstr "" -#: pysollib/tile/menubar.py:482 pysollib/tk/menubar.py:487 +#: pysollib/tile/menubar.py:479 pysollib/tk/menubar.py:484 msgid "&Very fast" msgstr "" -#: pysollib/tile/menubar.py:483 pysollib/tk/menubar.py:488 +#: pysollib/tile/menubar.py:480 pysollib/tk/menubar.py:485 msgid "&Fast" msgstr "" -#: pysollib/tile/menubar.py:484 pysollib/tk/menubar.py:489 +#: pysollib/tile/menubar.py:481 pysollib/tk/menubar.py:486 msgid "&Medium" msgstr "" -#: pysollib/tile/menubar.py:485 pysollib/tk/menubar.py:490 +#: pysollib/tile/menubar.py:482 pysollib/tk/menubar.py:487 msgid "&Slow" msgstr "" -#: pysollib/tile/menubar.py:486 pysollib/tk/menubar.py:491 +#: pysollib/tile/menubar.py:483 pysollib/tk/menubar.py:488 msgid "V&ery slow" msgstr "" -#: pysollib/tile/menubar.py:488 pysollib/tk/menubar.py:493 +#: pysollib/tile/menubar.py:485 pysollib/tk/menubar.py:490 msgid "&Redeal animation" msgstr "" -#: pysollib/tile/menubar.py:490 pysollib/tk/menubar.py:495 +#: pysollib/tile/menubar.py:487 pysollib/tk/menubar.py:492 msgid "&Winning animation" msgstr "" -#: pysollib/tile/menubar.py:491 pysollib/tk/menubar.py:496 +#: pysollib/tile/menubar.py:488 pysollib/tk/menubar.py:493 msgid "&Mouse" msgstr "" -#: pysollib/tile/menubar.py:492 pysollib/tk/menubar.py:497 +#: pysollib/tile/menubar.py:489 pysollib/tk/menubar.py:494 msgid "&Drag-and-Drop" msgstr "" -#: pysollib/tile/menubar.py:493 pysollib/tk/menubar.py:498 +#: pysollib/tile/menubar.py:490 pysollib/tk/menubar.py:495 msgid "&Point-and-Click" msgstr "" -#: pysollib/tile/menubar.py:494 pysollib/tk/menubar.py:499 +#: pysollib/tile/menubar.py:491 pysollib/tk/menubar.py:496 msgid "&Sticky mouse" msgstr "" -#: pysollib/tile/menubar.py:496 pysollib/tk/menubar.py:501 +#: pysollib/tile/menubar.py:493 pysollib/tk/menubar.py:498 msgid "Use mouse for undo/redo" msgstr "" -#: pysollib/tile/menubar.py:498 pysollib/tk/menubar.py:503 +#: pysollib/tile/menubar.py:495 pysollib/tk/menubar.py:500 msgid "&Fonts..." msgstr "" -#: pysollib/tile/menubar.py:499 pysollib/tk/menubar.py:504 +#: pysollib/tile/menubar.py:496 pysollib/tk/menubar.py:501 msgid "&Colors..." msgstr "" -#: pysollib/tile/menubar.py:500 pysollib/tk/menubar.py:505 +#: pysollib/tile/menubar.py:497 pysollib/tk/menubar.py:502 msgid "Time&outs..." msgstr "" -#: pysollib/tile/menubar.py:503 pysollib/tk/menubar.py:507 +#: pysollib/tile/menubar.py:500 pysollib/tk/menubar.py:504 msgid "&Toolbar" msgstr "" -#: pysollib/tile/menubar.py:505 pysollib/tk/menubar.py:509 +#: pysollib/tile/menubar.py:502 pysollib/tk/menubar.py:506 msgid "Stat&usbar" msgstr "" -#: pysollib/tile/menubar.py:506 pysollib/tk/menubar.py:510 +#: pysollib/tile/menubar.py:503 pysollib/tk/menubar.py:507 msgid "Show &statusbar" msgstr "" -#: pysollib/tile/menubar.py:507 pysollib/tk/menubar.py:511 +#: pysollib/tile/menubar.py:504 pysollib/tk/menubar.py:508 msgid "Show &number of cards" msgstr "" -#: pysollib/tile/menubar.py:508 pysollib/tk/menubar.py:512 +#: pysollib/tile/menubar.py:505 pysollib/tk/menubar.py:509 msgid "Show &help bar" msgstr "" -#: pysollib/tile/menubar.py:509 pysollib/tk/menubar.py:513 +#: pysollib/tile/menubar.py:506 pysollib/tk/menubar.py:510 msgid "Save games &geometry" msgstr "" -#: pysollib/tile/menubar.py:510 pysollib/tk/menubar.py:514 +#: pysollib/tile/menubar.py:507 pysollib/tk/menubar.py:511 msgid "&Demo logo" msgstr "" -#: pysollib/tile/menubar.py:511 pysollib/tk/menubar.py:515 +#: pysollib/tile/menubar.py:508 pysollib/tk/menubar.py:512 msgid "Startup splash sc&reen" msgstr "" -#: pysollib/tile/menubar.py:517 pysollib/tk/menubar.py:521 +#: pysollib/tile/menubar.py:514 pysollib/tk/menubar.py:518 msgid "&Help" msgstr "" -#: pysollib/tile/menubar.py:518 pysollib/tk/menubar.py:522 +#: pysollib/tile/menubar.py:515 pysollib/tk/menubar.py:519 msgid "&Contents" msgstr "" -#: pysollib/tile/menubar.py:519 pysollib/tk/menubar.py:523 +#: pysollib/tile/menubar.py:516 pysollib/tk/menubar.py:520 msgid "&How to play" msgstr "" -#: pysollib/tile/menubar.py:520 pysollib/tk/menubar.py:524 +#: pysollib/tile/menubar.py:517 pysollib/tk/menubar.py:521 msgid "&Rules for this game" msgstr "" -#: pysollib/tile/menubar.py:521 pysollib/tk/menubar.py:525 +#: pysollib/tile/menubar.py:518 pysollib/tk/menubar.py:522 msgid "&License terms" msgstr "" -#: pysollib/tile/menubar.py:638 pysollib/tk/menubar.py:642 +#: pysollib/tile/menubar.py:635 pysollib/tk/menubar.py:639 msgid "All &games..." msgstr "" -#: pysollib/tile/menubar.py:640 pysollib/tk/menubar.py:644 +#: pysollib/tile/menubar.py:637 pysollib/tk/menubar.py:641 msgid "Playable pre&view..." msgstr "" -#: pysollib/tile/menubar.py:693 pysollib/tk/menubar.py:697 +#: pysollib/tile/menubar.py:690 pysollib/tk/menubar.py:694 msgid "&Mahjongg games" msgstr "" -#: pysollib/tile/menubar.py:731 pysollib/tk/menubar.py:735 +#: pysollib/tile/menubar.py:728 pysollib/tk/menubar.py:732 msgid "&Popular games" msgstr "" -#: pysollib/tile/menubar.py:739 pysollib/tk/menubar.py:743 +#: pysollib/tile/menubar.py:736 pysollib/tk/menubar.py:740 msgid "&French games" msgstr "" -#: pysollib/tile/menubar.py:746 pysollib/tk/menubar.py:750 +#: pysollib/tile/menubar.py:743 pysollib/tk/menubar.py:747 msgid "&Oriental games" msgstr "" -#: pysollib/tile/menubar.py:754 pysollib/tk/menubar.py:758 +#: pysollib/tile/menubar.py:751 pysollib/tk/menubar.py:755 msgid "&Special games" msgstr "" -#: pysollib/tile/menubar.py:760 pysollib/tk/menubar.py:764 +#: pysollib/tile/menubar.py:757 pysollib/tk/menubar.py:761 msgid "&Cusom games" msgstr "" -#: pysollib/tile/menubar.py:766 pysollib/tk/menubar.py:770 +#: pysollib/tile/menubar.py:763 pysollib/tk/menubar.py:767 msgid "&All games by name" msgstr "" -#: pysollib/tile/menubar.py:1048 pysollib/tk/menubar.py:1052 +#: pysollib/tile/menubar.py:1045 pysollib/tk/menubar.py:1049 #: data/glade-translations:72 msgid "Sound settings" msgstr "" -#: pysollib/tile/menubar.py:1156 pysollib/tk/menubar.py:1164 +#: pysollib/tile/menubar.py:1153 pysollib/tk/menubar.py:1161 msgid "Select " msgstr "" -#: pysollib/tile/menubar.py:1202 pysollib/tk/menubar.py:1211 +#: pysollib/tile/menubar.py:1199 pysollib/tk/menubar.py:1208 msgid "Select table background" msgstr "" -#: pysollib/tile/menubar.py:1347 +#: pysollib/tile/menubar.py:1344 msgid "Change theme" msgstr "" -#: pysollib/tile/menubar.py:1348 +#: pysollib/tile/menubar.py:1345 msgid "" "This settings will take effect\n" "the next time you restart " msgstr "" -#: pysollib/tile/menubar.py:1355 +#: pysollib/tile/menubar.py:1352 msgid "Set t&heme" msgstr "" -#: pysollib/tile/menubar.py:1361 +#: pysollib/tile/menubar.py:1358 msgid "Default" msgstr "" -#: pysollib/tile/menubar.py:1362 +#: pysollib/tile/menubar.py:1359 msgid "Classic" msgstr "" -#: pysollib/tile/menubar.py:1363 +#: pysollib/tile/menubar.py:1360 msgid "Revitalized" msgstr "" -#: pysollib/tile/menubar.py:1364 +#: pysollib/tile/menubar.py:1361 msgid "Windows native" msgstr "" -#: pysollib/tile/menubar.py:1365 +#: pysollib/tile/menubar.py:1362 msgid "XP Native" msgstr "" -#: pysollib/tile/menubar.py:1366 +#: pysollib/tile/menubar.py:1363 msgid "Aqua" msgstr "" -#: pysollib/tile/menubar.py:1384 pysollib/tk/menubar.py:1369 +#: pysollib/tile/menubar.py:1381 pysollib/tk/menubar.py:1366 msgid "Solitaire Wizard" msgstr "" -#: pysollib/tile/menubar.py:1395 pysollib/tk/menubar.py:1380 +#: pysollib/tile/menubar.py:1392 pysollib/tk/menubar.py:1377 msgid "" "\n" "Error while saving game.\n" @@ -2702,12 +2693,12 @@ msgstr "" msgid "XLarge cardsets" msgstr "" -#: pysollib/tile/selectcardset.py:236 pysollib/tk/menubar.py:1161 +#: pysollib/tile/selectcardset.py:236 pysollib/tk/menubar.py:1158 msgid "&Info..." msgstr "" -#: pysollib/tile/selectcardset.py:237 pysollib/tk/menubar.py:1159 -#: pysollib/tk/menubar.py:1161 pysollib/tk/selectcardset.py:241 +#: pysollib/tile/selectcardset.py:237 pysollib/tk/menubar.py:1156 +#: pysollib/tk/menubar.py:1158 pysollib/tk/selectcardset.py:241 msgid "&Load" msgstr "" @@ -2715,10 +2706,10 @@ msgstr "" msgid "About cardset" msgstr "" -#: pysollib/tile/selectcardset.py:327 pysollib/tile/selectgame.py:355 -#: pysollib/tk/selectcardset.py:336 pysollib/tk/selectgame.py:365 -#: pysollib/wizardutil.py:118 pysollib/wizardutil.py:155 -#: pysollib/wizardutil.py:220 pysollib/wizardutil.py:278 +#: pysollib/tile/selectcardset.py:327 pysollib/tile/selectgame.py:354 +#: pysollib/tk/selectcardset.py:336 pysollib/tk/selectgame.py:364 +#: pysollib/wizardutil.py:116 pysollib/wizardutil.py:153 +#: pysollib/wizardutil.py:218 pysollib/wizardutil.py:276 msgid "Type:" msgstr "" @@ -2734,278 +2725,278 @@ msgstr "" msgid "Year:" msgstr "" -#: pysollib/tile/selectgame.py:101 pysollib/tk/selectgame.py:100 +#: pysollib/tile/selectgame.py:100 pysollib/tk/selectgame.py:99 msgid "(no games)" msgstr "" -#: pysollib/tile/selectgame.py:122 pysollib/tk/selectgame.py:121 +#: pysollib/tile/selectgame.py:121 pysollib/tk/selectgame.py:120 msgid "Mahjongg Games" msgstr "" -#: pysollib/tile/selectgame.py:125 pysollib/tk/selectgame.py:124 +#: pysollib/tile/selectgame.py:124 pysollib/tk/selectgame.py:123 msgid "French games" msgstr "" -#: pysollib/tile/selectgame.py:127 pysollib/tk/selectgame.py:126 +#: pysollib/tile/selectgame.py:126 pysollib/tk/selectgame.py:125 msgid "Oriental Games" msgstr "" -#: pysollib/tile/selectgame.py:129 pysollib/tk/selectgame.py:128 +#: pysollib/tile/selectgame.py:128 pysollib/tk/selectgame.py:127 msgid "Special Games" msgstr "" -#: pysollib/tile/selectgame.py:131 pysollib/tk/selectgame.py:130 +#: pysollib/tile/selectgame.py:130 pysollib/tk/selectgame.py:129 msgid "Original Games" msgstr "" -#: pysollib/tile/selectgame.py:145 pysollib/tk/selectgame.py:144 +#: pysollib/tile/selectgame.py:144 pysollib/tk/selectgame.py:143 msgid "by Compatibility" msgstr "" -#: pysollib/tile/selectgame.py:153 pysollib/tk/selectgame.py:152 +#: pysollib/tile/selectgame.py:152 pysollib/tk/selectgame.py:151 msgid "New games in v. " msgstr "" -#: pysollib/tile/selectgame.py:156 pysollib/tk/selectgame.py:155 +#: pysollib/tile/selectgame.py:155 pysollib/tk/selectgame.py:154 msgid "by PySol version" msgstr "" -#: pysollib/tile/selectgame.py:163 pysollib/tk/selectgame.py:162 +#: pysollib/tile/selectgame.py:162 pysollib/tk/selectgame.py:161 msgid "All Games" msgstr "" -#: pysollib/tile/selectgame.py:164 pysollib/tk/selectgame.py:163 +#: pysollib/tile/selectgame.py:163 pysollib/tk/selectgame.py:162 msgid "Alternate Names" msgstr "" -#: pysollib/tile/selectgame.py:165 pysollib/tk/selectgame.py:164 +#: pysollib/tile/selectgame.py:164 pysollib/tk/selectgame.py:163 msgid "Popular Games" msgstr "" -#: pysollib/tile/selectgame.py:170 pysollib/tk/selectgame.py:169 +#: pysollib/tile/selectgame.py:169 pysollib/tk/selectgame.py:168 msgid "by Skill Level" msgstr "" +#: pysollib/tile/selectgame.py:170 pysollib/tile/selectgame.py:523 +#: pysollib/tk/selectgame.py:169 pysollib/tk/selectgame.py:532 +#: pysollib/wizardutil.py:78 +msgid "Luck only" +msgstr "" + #: pysollib/tile/selectgame.py:171 pysollib/tile/selectgame.py:524 #: pysollib/tk/selectgame.py:170 pysollib/tk/selectgame.py:533 -#: pysollib/wizardutil.py:80 -msgid "Luck only" +#: pysollib/wizardutil.py:79 +msgid "Mostly luck" msgstr "" #: pysollib/tile/selectgame.py:172 pysollib/tile/selectgame.py:525 #: pysollib/tk/selectgame.py:171 pysollib/tk/selectgame.py:534 -#: pysollib/wizardutil.py:81 -msgid "Mostly luck" +#: pysollib/wizardutil.py:80 pysollib/wizardutil.py:84 +msgid "Balanced" msgstr "" #: pysollib/tile/selectgame.py:173 pysollib/tile/selectgame.py:526 #: pysollib/tk/selectgame.py:172 pysollib/tk/selectgame.py:535 -#: pysollib/wizardutil.py:82 pysollib/wizardutil.py:86 -msgid "Balanced" +#: pysollib/wizardutil.py:81 +msgid "Mostly skill" msgstr "" #: pysollib/tile/selectgame.py:174 pysollib/tile/selectgame.py:527 #: pysollib/tk/selectgame.py:173 pysollib/tk/selectgame.py:536 -#: pysollib/wizardutil.py:83 -msgid "Mostly skill" -msgstr "" - -#: pysollib/tile/selectgame.py:175 pysollib/tile/selectgame.py:528 -#: pysollib/tk/selectgame.py:174 pysollib/tk/selectgame.py:537 -#: pysollib/wizardutil.py:84 +#: pysollib/wizardutil.py:82 msgid "Skill only" msgstr "" -#: pysollib/tile/selectgame.py:177 pysollib/tk/selectgame.py:176 +#: pysollib/tile/selectgame.py:176 pysollib/tk/selectgame.py:175 msgid "by Game Feature" msgstr "" -#: pysollib/tile/selectgame.py:178 pysollib/tk/selectgame.py:177 +#: pysollib/tile/selectgame.py:177 pysollib/tk/selectgame.py:176 msgid "by Number of Cards" msgstr "" -#: pysollib/tile/selectgame.py:179 pysollib/tk/selectgame.py:178 +#: pysollib/tile/selectgame.py:178 pysollib/tk/selectgame.py:177 msgid "32 cards" msgstr "" -#: pysollib/tile/selectgame.py:180 pysollib/tk/selectgame.py:179 +#: pysollib/tile/selectgame.py:179 pysollib/tk/selectgame.py:178 msgid "48 cards" msgstr "" -#: pysollib/tile/selectgame.py:181 pysollib/tk/selectgame.py:180 +#: pysollib/tile/selectgame.py:180 pysollib/tk/selectgame.py:179 msgid "52 cards" msgstr "" -#: pysollib/tile/selectgame.py:182 pysollib/tk/selectgame.py:181 +#: pysollib/tile/selectgame.py:181 pysollib/tk/selectgame.py:180 msgid "64 cards" msgstr "" -#: pysollib/tile/selectgame.py:183 pysollib/tk/selectgame.py:182 +#: pysollib/tile/selectgame.py:182 pysollib/tk/selectgame.py:181 msgid "78 cards" msgstr "" -#: pysollib/tile/selectgame.py:184 pysollib/tk/selectgame.py:183 +#: pysollib/tile/selectgame.py:183 pysollib/tk/selectgame.py:182 msgid "104 cards" msgstr "" -#: pysollib/tile/selectgame.py:185 pysollib/tk/selectgame.py:184 +#: pysollib/tile/selectgame.py:184 pysollib/tk/selectgame.py:183 msgid "144 cards" msgstr "" -#: pysollib/tile/selectgame.py:186 pysollib/tk/selectgame.py:185 +#: pysollib/tile/selectgame.py:185 pysollib/tk/selectgame.py:184 msgid "Other number" msgstr "" -#: pysollib/tile/selectgame.py:188 pysollib/tk/selectgame.py:187 +#: pysollib/tile/selectgame.py:187 pysollib/tk/selectgame.py:186 msgid "by Number of Decks" msgstr "" -#: pysollib/tile/selectgame.py:189 pysollib/tk/selectgame.py:188 +#: pysollib/tile/selectgame.py:188 pysollib/tk/selectgame.py:187 msgid "1 deck games" msgstr "" -#: pysollib/tile/selectgame.py:190 pysollib/tk/selectgame.py:189 +#: pysollib/tile/selectgame.py:189 pysollib/tk/selectgame.py:188 msgid "2 deck games" msgstr "" -#: pysollib/tile/selectgame.py:191 pysollib/tk/selectgame.py:190 +#: pysollib/tile/selectgame.py:190 pysollib/tk/selectgame.py:189 msgid "3 deck games" msgstr "" -#: pysollib/tile/selectgame.py:192 pysollib/tk/selectgame.py:191 +#: pysollib/tile/selectgame.py:191 pysollib/tk/selectgame.py:190 msgid "4 deck games" msgstr "" -#: pysollib/tile/selectgame.py:194 pysollib/tk/selectgame.py:193 +#: pysollib/tile/selectgame.py:193 pysollib/tk/selectgame.py:192 msgid "by Number of Redeals" msgstr "" -#: pysollib/tile/selectgame.py:195 pysollib/tk/selectgame.py:194 +#: pysollib/tile/selectgame.py:194 pysollib/tk/selectgame.py:193 msgid "No redeal" msgstr "" -#: pysollib/tile/selectgame.py:196 pysollib/tk/selectgame.py:195 +#: pysollib/tile/selectgame.py:195 pysollib/tk/selectgame.py:194 msgid "1 redeal" msgstr "" -#: pysollib/tile/selectgame.py:197 pysollib/tk/selectgame.py:196 +#: pysollib/tile/selectgame.py:196 pysollib/tk/selectgame.py:195 msgid "2 redeals" msgstr "" -#: pysollib/tile/selectgame.py:198 pysollib/tk/selectgame.py:197 +#: pysollib/tile/selectgame.py:197 pysollib/tk/selectgame.py:196 msgid "3 redeals" msgstr "" -#: pysollib/tile/selectgame.py:199 pysollib/tk/selectgame.py:198 -#: pysollib/wizardutil.py:126 +#: pysollib/tile/selectgame.py:198 pysollib/tk/selectgame.py:197 +#: pysollib/wizardutil.py:124 msgid "Unlimited redeals" msgstr "" -#: pysollib/tile/selectgame.py:201 pysollib/tk/selectgame.py:200 +#: pysollib/tile/selectgame.py:200 pysollib/tk/selectgame.py:199 msgid "Other number of redeals" msgstr "" -#: pysollib/tile/selectgame.py:206 pysollib/tk/selectgame.py:205 +#: pysollib/tile/selectgame.py:205 pysollib/tk/selectgame.py:204 msgid "Other Categories" msgstr "" -#: pysollib/tile/selectgame.py:207 pysollib/tk/selectgame.py:206 +#: pysollib/tile/selectgame.py:206 pysollib/tk/selectgame.py:205 msgid "Games for Children (very easy)" msgstr "" -#: pysollib/tile/selectgame.py:208 pysollib/tk/selectgame.py:207 +#: pysollib/tile/selectgame.py:207 pysollib/tk/selectgame.py:206 msgid "Games with Scoring" msgstr "" -#: pysollib/tile/selectgame.py:209 pysollib/tk/selectgame.py:208 +#: pysollib/tile/selectgame.py:208 pysollib/tk/selectgame.py:207 msgid "Games with Separate Decks" msgstr "" -#: pysollib/tile/selectgame.py:210 pysollib/tk/selectgame.py:209 +#: pysollib/tile/selectgame.py:209 pysollib/tk/selectgame.py:208 msgid "Open Games (all cards visible)" msgstr "" -#: pysollib/tile/selectgame.py:211 pysollib/tk/selectgame.py:210 +#: pysollib/tile/selectgame.py:210 pysollib/tk/selectgame.py:209 msgid "Relaxed Variants" msgstr "" -#: pysollib/tile/selectgame.py:342 pysollib/tk/selectgame.py:349 +#: pysollib/tile/selectgame.py:341 pysollib/tk/selectgame.py:348 msgid "About game" msgstr "" -#: pysollib/tile/selectgame.py:352 pysollib/tk/selectgame.py:362 -#: pysollib/wizardutil.py:76 +#: pysollib/tile/selectgame.py:351 pysollib/tk/selectgame.py:361 +#: pysollib/wizardutil.py:74 msgid "Name:" msgstr "" -#: pysollib/tile/selectgame.py:353 pysollib/tk/selectgame.py:363 +#: pysollib/tile/selectgame.py:352 pysollib/tk/selectgame.py:362 msgid "Alternate names:" msgstr "" -#: pysollib/tile/selectgame.py:354 pysollib/tk/selectgame.py:364 +#: pysollib/tile/selectgame.py:353 pysollib/tk/selectgame.py:363 msgid "Category:" msgstr "" -#: pysollib/tile/selectgame.py:356 pysollib/tk/selectgame.py:366 -#: pysollib/wizardutil.py:87 +#: pysollib/tile/selectgame.py:355 pysollib/tk/selectgame.py:365 +#: pysollib/wizardutil.py:85 msgid "Skill level:" msgstr "" -#: pysollib/tile/selectgame.py:357 pysollib/tk/selectgame.py:367 +#: pysollib/tile/selectgame.py:356 pysollib/tk/selectgame.py:366 msgid "Decks:" msgstr "" -#: pysollib/tile/selectgame.py:358 pysollib/tk/selectgame.py:368 +#: pysollib/tile/selectgame.py:357 pysollib/tk/selectgame.py:367 msgid "Redeals:" msgstr "" -#: pysollib/tile/selectgame.py:360 pysollib/tk/selectgame.py:370 +#: pysollib/tile/selectgame.py:359 pysollib/tk/selectgame.py:369 msgid "Played:" msgstr "" -#: pysollib/tile/selectgame.py:361 pysollib/tile/tkstats.py:205 -#: pysollib/tile/tkstats.py:257 pysollib/tk/selectgame.py:371 -#: pysollib/tk/tkstats.py:114 pysollib/tk/tkstats.py:166 +#: pysollib/tile/selectgame.py:360 pysollib/tile/tkstats.py:203 +#: pysollib/tile/tkstats.py:255 pysollib/tk/selectgame.py:370 +#: pysollib/tk/tkstats.py:112 pysollib/tk/tkstats.py:164 #: data/glade-translations:9 data/glade-translations:13 msgid "Won:" msgstr "" -#: pysollib/tile/selectgame.py:362 pysollib/tile/tkstats.py:206 -#: pysollib/tile/tkstats.py:259 pysollib/tk/selectgame.py:372 -#: pysollib/tk/tkstats.py:115 pysollib/tk/tkstats.py:167 +#: pysollib/tile/selectgame.py:361 pysollib/tile/tkstats.py:204 +#: pysollib/tile/tkstats.py:257 pysollib/tk/selectgame.py:371 +#: pysollib/tk/tkstats.py:113 pysollib/tk/tkstats.py:165 #: data/glade-translations:11 data/glade-translations:14 msgid "Lost:" msgstr "" -#: pysollib/tile/selectgame.py:363 pysollib/tile/tkstats.py:777 -#: pysollib/tk/selectgame.py:373 pysollib/tk/tkstats.py:741 +#: pysollib/tile/selectgame.py:362 pysollib/tile/tkstats.py:775 +#: pysollib/tk/selectgame.py:372 pysollib/tk/tkstats.py:739 #: data/glade-translations:18 msgid "Playing time:" msgstr "" -#: pysollib/tile/selectgame.py:364 pysollib/tile/tkstats.py:784 -#: pysollib/tk/selectgame.py:374 pysollib/tk/tkstats.py:748 +#: pysollib/tile/selectgame.py:363 pysollib/tile/tkstats.py:782 +#: pysollib/tk/selectgame.py:373 pysollib/tk/tkstats.py:746 #: data/glade-translations:19 msgid "Moves:" msgstr "" -#: pysollib/tile/selectgame.py:365 pysollib/tk/selectgame.py:375 +#: pysollib/tile/selectgame.py:364 pysollib/tk/selectgame.py:374 msgid "% won:" msgstr "" -#: pysollib/tile/selectgame.py:397 pysollib/tk/selectgame.py:407 +#: pysollib/tile/selectgame.py:396 pysollib/tk/selectgame.py:406 msgid "&Rules" msgstr "" -#: pysollib/tile/selectgame.py:477 pysollib/tk/selectgame.py:486 +#: pysollib/tile/selectgame.py:476 pysollib/tk/selectgame.py:485 msgid "Playable Preview - " msgstr "" -#: pysollib/tile/selectgame.py:531 pysollib/tk/selectgame.py:540 +#: pysollib/tile/selectgame.py:530 pysollib/tk/selectgame.py:539 msgid "variable" msgstr "" -#: pysollib/tile/selectgame.py:532 pysollib/tk/selectgame.py:541 +#: pysollib/tile/selectgame.py:531 pysollib/tk/selectgame.py:540 msgid "unlimited" msgstr "" @@ -3041,68 +3032,68 @@ msgstr "" msgid "Select table color" msgstr "" -#: pysollib/tile/solverdialog.py:79 pysollib/tk/solverdialog.py:78 +#: pysollib/tile/solverdialog.py:77 pysollib/tk/solverdialog.py:76 #: data/glade-translations:8 data/glade-translations:28 msgid "Game:" msgstr "" -#: pysollib/tile/solverdialog.py:98 pysollib/tk/solverdialog.py:101 +#: pysollib/tile/solverdialog.py:96 pysollib/tk/solverdialog.py:99 msgid "Solving method:" msgstr "" -#: pysollib/tile/solverdialog.py:115 pysollib/tk/solverdialog.py:118 +#: pysollib/tile/solverdialog.py:113 pysollib/tk/solverdialog.py:116 msgid "Preset:" msgstr "" -#: pysollib/tile/solverdialog.py:139 pysollib/tk/solverdialog.py:142 +#: pysollib/tile/solverdialog.py:137 pysollib/tk/solverdialog.py:140 msgid "Max iterations:" msgstr "" -#: pysollib/tile/solverdialog.py:149 pysollib/tk/solverdialog.py:152 +#: pysollib/tile/solverdialog.py:147 pysollib/tk/solverdialog.py:150 msgid "Max depth:" msgstr "" -#: pysollib/tile/solverdialog.py:160 pysollib/tk/solverdialog.py:163 +#: pysollib/tile/solverdialog.py:158 pysollib/tk/solverdialog.py:161 msgid "Show progress" msgstr "" -#: pysollib/tile/solverdialog.py:164 pysollib/tk/solverdialog.py:167 +#: pysollib/tile/solverdialog.py:162 pysollib/tk/solverdialog.py:165 msgid "Progress" msgstr "" -#: pysollib/tile/solverdialog.py:171 pysollib/tk/solverdialog.py:174 +#: pysollib/tile/solverdialog.py:169 pysollib/tk/solverdialog.py:172 msgid "Iteration:" msgstr "" -#: pysollib/tile/solverdialog.py:177 pysollib/tk/solverdialog.py:180 +#: pysollib/tile/solverdialog.py:175 pysollib/tk/solverdialog.py:178 msgid "Depth:" msgstr "" -#: pysollib/tile/solverdialog.py:183 pysollib/tk/solverdialog.py:186 +#: pysollib/tile/solverdialog.py:181 pysollib/tk/solverdialog.py:184 msgid "Stored-States:" msgstr "" -#: pysollib/tile/solverdialog.py:206 pysollib/tk/solverdialog.py:209 +#: pysollib/tile/solverdialog.py:204 pysollib/tk/solverdialog.py:207 msgid "&Close" msgstr "" -#: pysollib/tile/solverdialog.py:206 pysollib/tk/solverdialog.py:209 +#: pysollib/tile/solverdialog.py:204 pysollib/tk/solverdialog.py:207 msgid "&New" msgstr "" -#: pysollib/tile/solverdialog.py:206 pysollib/tk/solverdialog.py:209 +#: pysollib/tile/solverdialog.py:204 pysollib/tk/solverdialog.py:207 msgid "&Play" msgstr "" -#: pysollib/tile/solverdialog.py:206 pysollib/tk/solverdialog.py:209 +#: pysollib/tile/solverdialog.py:204 pysollib/tk/solverdialog.py:207 msgid "&Start" msgstr "" -#: pysollib/tile/solverdialog.py:276 pysollib/tk/solverdialog.py:279 +#: pysollib/tile/solverdialog.py:274 pysollib/tk/solverdialog.py:277 msgid "This game is solveable in %s moves." msgstr "" -#: pysollib/tile/solverdialog.py:279 pysollib/tk/solverdialog.py:282 +#: pysollib/tile/solverdialog.py:277 pysollib/tk/solverdialog.py:280 msgid "I could not solve this game." msgstr "" @@ -3154,13 +3145,13 @@ msgstr "" msgid "No move" msgstr "" -#: pysollib/tile/soundoptionsdialog.py:94 pysollib/tile/toolbar.py:195 -#: pysollib/tk/soundoptionsdialog.py:92 pysollib/tk/toolbar.py:198 +#: pysollib/tile/soundoptionsdialog.py:94 pysollib/tile/toolbar.py:192 +#: pysollib/tk/soundoptionsdialog.py:92 pysollib/tk/toolbar.py:195 msgid "Undo" msgstr "" -#: pysollib/tile/soundoptionsdialog.py:95 pysollib/tile/toolbar.py:196 -#: pysollib/tk/soundoptionsdialog.py:93 pysollib/tk/toolbar.py:199 +#: pysollib/tile/soundoptionsdialog.py:95 pysollib/tile/toolbar.py:193 +#: pysollib/tk/soundoptionsdialog.py:93 pysollib/tk/toolbar.py:196 msgid "Redo" msgstr "" @@ -3256,19 +3247,19 @@ msgstr "" msgid "Highlight same rank:" msgstr "" -#: pysollib/tile/tkconst.py:109 pysollib/tk/tkconst.py:107 +#: pysollib/tile/tkconst.py:106 pysollib/tk/tkconst.py:104 msgid "Icons only" msgstr "" -#: pysollib/tile/tkconst.py:110 pysollib/tk/tkconst.py:108 +#: pysollib/tile/tkconst.py:107 pysollib/tk/tkconst.py:105 msgid "Text below icons" msgstr "" -#: pysollib/tile/tkconst.py:111 pysollib/tk/tkconst.py:109 +#: pysollib/tile/tkconst.py:108 pysollib/tk/tkconst.py:106 msgid "Text beside icons" msgstr "" -#: pysollib/tile/tkconst.py:112 pysollib/tk/tkconst.py:110 +#: pysollib/tile/tkconst.py:109 pysollib/tk/tkconst.py:107 msgid "Text only" msgstr "" @@ -3303,311 +3294,311 @@ msgstr "" msgid "Unable to service request:\n" msgstr "" -#: pysollib/tile/tkstats.py:95 pysollib/tile/tkstats.py:741 -#: pysollib/tile/tkstats.py:883 pysollib/tk/tkstats.py:910 +#: pysollib/tile/tkstats.py:93 pysollib/tile/tkstats.py:739 +#: pysollib/tile/tkstats.py:881 pysollib/tk/tkstats.py:908 #: data/glade-translations:17 msgid "Current game" msgstr "" -#: pysollib/tile/tkstats.py:99 pysollib/tile/tkstats.py:749 -#: pysollib/tile/tkstats.py:878 pysollib/tk/tkstats.py:904 +#: pysollib/tile/tkstats.py:97 pysollib/tile/tkstats.py:747 +#: pysollib/tile/tkstats.py:876 pysollib/tk/tkstats.py:902 #: data/glade-translations:30 msgid "All games" msgstr "" -#: pysollib/tile/tkstats.py:109 +#: pysollib/tile/tkstats.py:107 msgid "Progression" msgstr "" -#: pysollib/tile/tkstats.py:124 +#: pysollib/tile/tkstats.py:122 msgid "&Play this game" msgstr "" -#: pysollib/tile/tkstats.py:126 pysollib/tk/tkstats.py:294 +#: pysollib/tile/tkstats.py:124 pysollib/tk/tkstats.py:292 msgid "&Reset..." msgstr "" -#: pysollib/tile/tkstats.py:186 pysollib/tk/tkstats.py:81 +#: pysollib/tile/tkstats.py:184 pysollib/tk/tkstats.py:79 msgid "Demo games" msgstr "" -#: pysollib/tile/tkstats.py:191 pysollib/tk/tkstats.py:98 +#: pysollib/tile/tkstats.py:189 pysollib/tk/tkstats.py:96 #: data/glade-translations:16 msgid "Total" msgstr "" -#: pysollib/tile/tkstats.py:193 pysollib/tk/tkstats.py:100 +#: pysollib/tile/tkstats.py:191 pysollib/tk/tkstats.py:98 #: data/glade-translations:12 msgid "Current session" msgstr "" -#: pysollib/tile/tkstats.py:207 pysollib/tile/tkstats.py:261 -#: pysollib/tk/tkstats.py:116 pysollib/tk/tkstats.py:168 +#: pysollib/tile/tkstats.py:205 pysollib/tile/tkstats.py:259 +#: pysollib/tk/tkstats.py:114 pysollib/tk/tkstats.py:166 #: data/glade-translations:10 data/glade-translations:15 msgid "Total:" msgstr "" -#: pysollib/tile/tkstats.py:314 pysollib/tk/tkstats.py:281 +#: pysollib/tile/tkstats.py:312 pysollib/tk/tkstats.py:279 msgid "No games" msgstr "" -#: pysollib/tile/tkstats.py:516 +#: pysollib/tile/tkstats.py:514 msgid "Log" msgstr "" -#: pysollib/tile/tkstats.py:547 pysollib/tk/tkstats.py:518 -#: pysollib/tk/tkstats.py:584 pysollib/tk/tkstats.py:599 +#: pysollib/tile/tkstats.py:545 pysollib/tk/tkstats.py:516 +#: pysollib/tk/tkstats.py:582 pysollib/tk/tkstats.py:597 msgid "&Save to file" msgstr "" -#: pysollib/tile/tkstats.py:617 pysollib/tk/tkstats.py:614 +#: pysollib/tile/tkstats.py:615 pysollib/tk/tkstats.py:612 msgid "Highlight piles: " msgstr "" -#: pysollib/tile/tkstats.py:618 pysollib/tk/tkstats.py:615 +#: pysollib/tile/tkstats.py:616 pysollib/tk/tkstats.py:613 msgid "Highlight cards: " msgstr "" -#: pysollib/tile/tkstats.py:619 pysollib/tk/tkstats.py:616 +#: pysollib/tile/tkstats.py:617 pysollib/tk/tkstats.py:614 msgid "Highlight same rank: " msgstr "" -#: pysollib/tile/tkstats.py:622 pysollib/tk/tkstats.py:619 +#: pysollib/tile/tkstats.py:620 pysollib/tk/tkstats.py:617 msgid "" "\n" "Redeals: " msgstr "" -#: pysollib/tile/tkstats.py:623 pysollib/tk/tkstats.py:620 +#: pysollib/tile/tkstats.py:621 pysollib/tk/tkstats.py:618 msgid "" "\n" "Cards in Talon: " msgstr "" -#: pysollib/tile/tkstats.py:625 pysollib/tk/tkstats.py:622 +#: pysollib/tile/tkstats.py:623 pysollib/tk/tkstats.py:620 msgid "" "\n" "Cards in Waste: " msgstr "" -#: pysollib/tile/tkstats.py:627 pysollib/tk/tkstats.py:624 +#: pysollib/tile/tkstats.py:625 pysollib/tk/tkstats.py:622 msgid "" "\n" "Cards in Foundations: " msgstr "" -#: pysollib/tile/tkstats.py:631 pysollib/tk/tkstats.py:627 +#: pysollib/tile/tkstats.py:629 pysollib/tk/tkstats.py:625 msgid "Game status" msgstr "" -#: pysollib/tile/tkstats.py:634 pysollib/tk/tkstats.py:630 +#: pysollib/tile/tkstats.py:632 pysollib/tk/tkstats.py:628 msgid "Playing time: " msgstr "" -#: pysollib/tile/tkstats.py:635 pysollib/tk/tkstats.py:631 +#: pysollib/tile/tkstats.py:633 pysollib/tk/tkstats.py:629 msgid "Started at: " msgstr "" -#: pysollib/tile/tkstats.py:636 pysollib/tk/tkstats.py:632 +#: pysollib/tile/tkstats.py:634 pysollib/tk/tkstats.py:630 msgid "Moves: " msgstr "" -#: pysollib/tile/tkstats.py:637 pysollib/tk/tkstats.py:633 +#: pysollib/tile/tkstats.py:635 pysollib/tk/tkstats.py:631 msgid "Undo moves: " msgstr "" -#: pysollib/tile/tkstats.py:638 pysollib/tk/tkstats.py:634 +#: pysollib/tile/tkstats.py:636 pysollib/tk/tkstats.py:632 msgid "Bookmark moves: " msgstr "" -#: pysollib/tile/tkstats.py:639 pysollib/tk/tkstats.py:635 +#: pysollib/tile/tkstats.py:637 pysollib/tk/tkstats.py:633 msgid "Demo moves: " msgstr "" -#: pysollib/tile/tkstats.py:640 pysollib/tk/tkstats.py:636 +#: pysollib/tile/tkstats.py:638 pysollib/tk/tkstats.py:634 msgid "Total player moves: " msgstr "" -#: pysollib/tile/tkstats.py:641 pysollib/tk/tkstats.py:637 +#: pysollib/tile/tkstats.py:639 pysollib/tk/tkstats.py:635 msgid "Total moves in this game: " msgstr "" -#: pysollib/tile/tkstats.py:642 pysollib/tk/tkstats.py:638 +#: pysollib/tile/tkstats.py:640 pysollib/tk/tkstats.py:636 msgid "Hints: " msgstr "" -#: pysollib/tile/tkstats.py:671 pysollib/tk/tkstats.py:668 +#: pysollib/tile/tkstats.py:669 pysollib/tk/tkstats.py:666 msgid "N" msgstr "" -#: pysollib/tile/tkstats.py:684 pysollib/tk/tkstats.py:677 +#: pysollib/tile/tkstats.py:682 pysollib/tk/tkstats.py:675 msgid "Result" msgstr "" -#: pysollib/tile/tkstats.py:746 pysollib/tk/tkstats.py:786 +#: pysollib/tile/tkstats.py:744 pysollib/tk/tkstats.py:784 msgid "No TOP for this game" msgstr "" -#: pysollib/tile/tkstats.py:754 +#: pysollib/tile/tkstats.py:752 msgid "No TOP for all games" msgstr "" -#: pysollib/tile/tkstats.py:765 pysollib/tk/tkstats.py:733 +#: pysollib/tile/tkstats.py:763 pysollib/tk/tkstats.py:731 #: data/glade-translations:21 msgid "Minimum" msgstr "" -#: pysollib/tile/tkstats.py:767 pysollib/tk/tkstats.py:734 +#: pysollib/tile/tkstats.py:765 pysollib/tk/tkstats.py:732 #: data/glade-translations:22 msgid "Maximum" msgstr "" -#: pysollib/tile/tkstats.py:769 pysollib/tk/tkstats.py:735 +#: pysollib/tile/tkstats.py:767 pysollib/tk/tkstats.py:733 #: data/glade-translations:23 msgid "Average" msgstr "" -#: pysollib/tile/tkstats.py:791 pysollib/tk/tkstats.py:755 +#: pysollib/tile/tkstats.py:789 pysollib/tk/tkstats.py:753 #: data/glade-translations:20 msgid "Total moves:" msgstr "" -#: pysollib/tile/tkstats.py:888 pysollib/tk/tkstats.py:917 +#: pysollib/tile/tkstats.py:886 pysollib/tk/tkstats.py:915 msgid "Statistics for" msgstr "" -#: pysollib/tile/tkstats.py:893 pysollib/tk/tkstats.py:924 +#: pysollib/tile/tkstats.py:891 pysollib/tk/tkstats.py:922 msgid "Last 7 days" msgstr "" -#: pysollib/tile/tkstats.py:894 pysollib/tk/tkstats.py:925 +#: pysollib/tile/tkstats.py:892 pysollib/tk/tkstats.py:923 msgid "Last month" msgstr "" -#: pysollib/tile/tkstats.py:895 pysollib/tk/tkstats.py:926 +#: pysollib/tile/tkstats.py:893 pysollib/tk/tkstats.py:924 msgid "Last year" msgstr "" -#: pysollib/tile/tkstats.py:896 pysollib/tk/tkstats.py:927 +#: pysollib/tile/tkstats.py:894 pysollib/tk/tkstats.py:925 msgid "All time" msgstr "" -#: pysollib/tile/tkstats.py:902 pysollib/tk/tkstats.py:935 +#: pysollib/tile/tkstats.py:900 pysollib/tk/tkstats.py:933 msgid "Show graphs" msgstr "" -#: pysollib/tile/tkstats.py:950 pysollib/tile/tkstats.py:966 -#: pysollib/tile/tkstats.py:1005 pysollib/tk/tkstats.py:858 -#: pysollib/tk/tkstats.py:874 pysollib/tk/tkstats.py:986 +#: pysollib/tile/tkstats.py:948 pysollib/tile/tkstats.py:964 +#: pysollib/tile/tkstats.py:1003 pysollib/tk/tkstats.py:856 +#: pysollib/tk/tkstats.py:872 pysollib/tk/tkstats.py:984 msgid "Games/day" msgstr "" -#: pysollib/tile/tkstats.py:951 pysollib/tile/tkstats.py:1007 -#: pysollib/tk/tkstats.py:859 pysollib/tk/tkstats.py:988 +#: pysollib/tile/tkstats.py:949 pysollib/tile/tkstats.py:1005 +#: pysollib/tk/tkstats.py:857 pysollib/tk/tkstats.py:986 msgid "Games/week" msgstr "" -#: pysollib/tile/toolbar.py:189 pysollib/tk/toolbar.py:192 +#: pysollib/tile/toolbar.py:186 pysollib/tk/toolbar.py:189 msgid "New" msgstr "" -#: pysollib/tile/toolbar.py:190 pysollib/tk/toolbar.py:193 +#: pysollib/tile/toolbar.py:187 pysollib/tk/toolbar.py:190 msgid "" "Restart the\n" "current game" msgstr "" -#: pysollib/tile/toolbar.py:192 pysollib/tk/toolbar.py:195 +#: pysollib/tile/toolbar.py:189 pysollib/tk/toolbar.py:192 msgid "Open" msgstr "" -#: pysollib/tile/toolbar.py:192 pysollib/tk/toolbar.py:195 +#: pysollib/tile/toolbar.py:189 pysollib/tk/toolbar.py:192 msgid "" "Open a\n" "saved game" msgstr "" -#: pysollib/tile/toolbar.py:193 pysollib/tk/toolbar.py:196 +#: pysollib/tile/toolbar.py:190 pysollib/tk/toolbar.py:193 msgid "Save" msgstr "" -#: pysollib/tile/toolbar.py:193 pysollib/tk/toolbar.py:196 +#: pysollib/tile/toolbar.py:190 pysollib/tk/toolbar.py:193 msgid "Save game" msgstr "" -#: pysollib/tile/toolbar.py:195 pysollib/tk/toolbar.py:198 +#: pysollib/tile/toolbar.py:192 pysollib/tk/toolbar.py:195 msgid "Undo last move" msgstr "" -#: pysollib/tile/toolbar.py:196 pysollib/tk/toolbar.py:199 +#: pysollib/tile/toolbar.py:193 pysollib/tk/toolbar.py:196 msgid "Redo last move" msgstr "" -#: pysollib/tile/toolbar.py:197 pysollib/tk/toolbar.py:200 +#: pysollib/tile/toolbar.py:194 pysollib/tk/toolbar.py:197 msgid "Auto drop cards" msgstr "" -#: pysollib/tile/toolbar.py:197 pysollib/tk/toolbar.py:200 +#: pysollib/tile/toolbar.py:194 pysollib/tk/toolbar.py:197 msgid "Autodrop" msgstr "" -#: pysollib/tile/toolbar.py:198 pysollib/tk/toolbar.py:201 +#: pysollib/tile/toolbar.py:195 pysollib/tk/toolbar.py:198 msgid "Pause" msgstr "" -#: pysollib/tile/toolbar.py:198 pysollib/tk/toolbar.py:201 +#: pysollib/tile/toolbar.py:195 pysollib/tk/toolbar.py:198 msgid "Pause game" msgstr "" -#: pysollib/tile/toolbar.py:200 pysollib/tk/toolbar.py:203 +#: pysollib/tile/toolbar.py:197 pysollib/tk/toolbar.py:200 msgid "View statistics" msgstr "" -#: pysollib/tile/toolbar.py:201 pysollib/tk/toolbar.py:204 +#: pysollib/tile/toolbar.py:198 pysollib/tk/toolbar.py:201 msgid "Rules" msgstr "" -#: pysollib/tile/toolbar.py:201 pysollib/tk/toolbar.py:204 +#: pysollib/tile/toolbar.py:198 pysollib/tk/toolbar.py:201 msgid "Rules for this game" msgstr "" -#: pysollib/tile/toolbar.py:203 pysollib/tk/toolbar.py:206 +#: pysollib/tile/toolbar.py:200 pysollib/tk/toolbar.py:203 msgid "Quit" msgstr "" -#: pysollib/tile/toolbar.py:217 pysollib/tk/toolbar.py:220 +#: pysollib/tile/toolbar.py:214 pysollib/tk/toolbar.py:217 msgid "Player" msgstr "" -#: pysollib/tile/toolbar.py:218 pysollib/tk/toolbar.py:221 +#: pysollib/tile/toolbar.py:215 pysollib/tk/toolbar.py:218 msgid "Player options" msgstr "" -#: pysollib/tile/toolbar.py:399 pysollib/tk/toolbar.py:436 +#: pysollib/tile/toolbar.py:396 pysollib/tk/toolbar.py:433 msgid "Toolbar" msgstr "" -#: pysollib/tk/menubar.py:418 +#: pysollib/tk/menubar.py:415 msgid "&Statistics" msgstr "" -#: pysollib/tk/menubar.py:419 pysollib/tk/menubar.py:428 +#: pysollib/tk/menubar.py:416 pysollib/tk/menubar.py:425 msgid "Current game..." msgstr "" -#: pysollib/tk/menubar.py:420 pysollib/tk/menubar.py:429 +#: pysollib/tk/menubar.py:417 pysollib/tk/menubar.py:426 msgid "All games..." msgstr "" -#: pysollib/tk/menubar.py:422 +#: pysollib/tk/menubar.py:419 msgid "Session log..." msgstr "" -#: pysollib/tk/menubar.py:423 +#: pysollib/tk/menubar.py:420 msgid "Full log..." msgstr "" -#: pysollib/tk/menubar.py:426 +#: pysollib/tk/menubar.py:423 msgid "Progression..." msgstr "" @@ -3623,19 +3614,19 @@ msgstr "" msgid "Enable samles" msgstr "" -#: pysollib/tk/tkstats.py:292 +#: pysollib/tk/tkstats.py:290 msgid "&All games..." msgstr "" -#: pysollib/tk/tkstats.py:519 +#: pysollib/tk/tkstats.py:517 msgid "&Reset all..." msgstr "" -#: pysollib/tk/tkstats.py:584 +#: pysollib/tk/tkstats.py:582 msgid "Session &log..." msgstr "" -#: pysollib/tk/tkstats.py:599 +#: pysollib/tk/tkstats.py:597 msgid "&Full log..." msgstr "" @@ -3667,282 +3658,282 @@ msgstr "" msgid "cardset" msgstr "" -#: pysollib/wizardpresets.py:27 +#: pysollib/wizardpresets.py:25 pysollib/wizardutil.py:72 msgid "My Game" msgstr "" -#: pysollib/wizardpresets.py:32 +#: pysollib/wizardpresets.py:30 msgid "My Klondike" msgstr "" -#: pysollib/wizardpresets.py:46 +#: pysollib/wizardpresets.py:44 msgid "My FreeCell" msgstr "" -#: pysollib/wizardpresets.py:55 +#: pysollib/wizardpresets.py:53 msgid "My Spider" msgstr "" -#: pysollib/wizardpresets.py:72 +#: pysollib/wizardpresets.py:70 msgid "My Gypsy" msgstr "" -#: pysollib/wizardpresets.py:85 +#: pysollib/wizardpresets.py:83 msgid "My Ground for a Divorce" msgstr "" -#: pysollib/wizardpresets.py:102 +#: pysollib/wizardpresets.py:100 msgid "My Double Klondike" msgstr "" -#: pysollib/wizardpresets.py:117 +#: pysollib/wizardpresets.py:115 msgid "My Simple Simon" msgstr "" -#: pysollib/wizardutil.py:69 +#: pysollib/wizardutil.py:67 msgid "Initial setting:" msgstr "" -#: pysollib/wizardutil.py:91 pysollib/wizardutil.py:95 +#: pysollib/wizardutil.py:89 pysollib/wizardutil.py:93 msgid "One" msgstr "" -#: pysollib/wizardutil.py:92 +#: pysollib/wizardutil.py:90 msgid "Two" msgstr "" -#: pysollib/wizardutil.py:93 +#: pysollib/wizardutil.py:91 msgid "Three" msgstr "" -#: pysollib/wizardutil.py:94 +#: pysollib/wizardutil.py:92 msgid "Four" msgstr "" -#: pysollib/wizardutil.py:96 +#: pysollib/wizardutil.py:94 msgid "Number of decks:" msgstr "" -#: pysollib/wizardutil.py:106 +#: pysollib/wizardutil.py:104 msgid "Layout:" msgstr "" -#: pysollib/wizardutil.py:110 pysollib/wizardutil.py:117 -#: pysollib/wizardutil.py:347 +#: pysollib/wizardutil.py:108 pysollib/wizardutil.py:115 +#: pysollib/wizardutil.py:345 msgid "Initial dealing" msgstr "" -#: pysollib/wizardutil.py:111 +#: pysollib/wizardutil.py:109 msgid "Deal to waste" msgstr "" -#: pysollib/wizardutil.py:112 +#: pysollib/wizardutil.py:110 msgid "Deal to tableau" msgstr "" -#: pysollib/wizardutil.py:113 +#: pysollib/wizardutil.py:111 msgid "Deal to reserves" msgstr "" -#: pysollib/wizardutil.py:115 +#: pysollib/wizardutil.py:113 msgid "Ground for a Divorce" msgstr "" -#: pysollib/wizardutil.py:122 pysollib/wizardutil.py:128 +#: pysollib/wizardutil.py:120 pysollib/wizardutil.py:126 msgid "No redeals" msgstr "" -#: pysollib/wizardutil.py:123 +#: pysollib/wizardutil.py:121 msgid "One redeal" msgstr "" -#: pysollib/wizardutil.py:124 +#: pysollib/wizardutil.py:122 msgid "Two redeals" msgstr "" -#: pysollib/wizardutil.py:125 +#: pysollib/wizardutil.py:123 msgid "Three redeals" msgstr "" -#: pysollib/wizardutil.py:129 +#: pysollib/wizardutil.py:127 msgid "Number of redeals:" msgstr "" -#: pysollib/wizardutil.py:136 +#: pysollib/wizardutil.py:134 msgid "# of cards dealt to the waste:" msgstr "" -#: pysollib/wizardutil.py:142 +#: pysollib/wizardutil.py:140 msgid "Shuffle during redeal:" msgstr "" -#: pysollib/wizardutil.py:147 pysollib/wizardutil.py:154 -#: pysollib/wizardutil.py:201 +#: pysollib/wizardutil.py:145 pysollib/wizardutil.py:152 +#: pysollib/wizardutil.py:199 msgid "Same suit" msgstr "" -#: pysollib/wizardutil.py:148 pysollib/wizardutil.py:202 -#: pysollib/wizardutil.py:219 +#: pysollib/wizardutil.py:146 pysollib/wizardutil.py:200 +#: pysollib/wizardutil.py:217 msgid "Alternate color" msgstr "" -#: pysollib/wizardutil.py:149 pysollib/wizardutil.py:203 +#: pysollib/wizardutil.py:147 pysollib/wizardutil.py:201 msgid "Same color" msgstr "" -#: pysollib/wizardutil.py:150 pysollib/wizardutil.py:204 +#: pysollib/wizardutil.py:148 pysollib/wizardutil.py:202 msgid "Rank" msgstr "" -#: pysollib/wizardutil.py:151 pysollib/wizardutil.py:212 +#: pysollib/wizardutil.py:149 pysollib/wizardutil.py:210 msgid "Spider same suit" msgstr "" -#: pysollib/wizardutil.py:152 pysollib/wizardutil.py:213 +#: pysollib/wizardutil.py:150 pysollib/wizardutil.py:211 msgid "Spider alternate color" msgstr "" -#: pysollib/wizardutil.py:161 pysollib/wizardutil.py:226 -#: pysollib/wizardutil.py:229 +#: pysollib/wizardutil.py:159 pysollib/wizardutil.py:224 +#: pysollib/wizardutil.py:227 msgid "Any" msgstr "" -#: pysollib/wizardutil.py:164 pysollib/wizardutil.py:230 +#: pysollib/wizardutil.py:162 pysollib/wizardutil.py:228 msgid "Base card:" msgstr "" -#: pysollib/wizardutil.py:168 pysollib/wizardutil.py:169 -#: pysollib/wizardutil.py:234 +#: pysollib/wizardutil.py:166 pysollib/wizardutil.py:167 +#: pysollib/wizardutil.py:232 msgid "Up" msgstr "" -#: pysollib/wizardutil.py:168 pysollib/wizardutil.py:234 -#: pysollib/wizardutil.py:235 +#: pysollib/wizardutil.py:166 pysollib/wizardutil.py:232 +#: pysollib/wizardutil.py:233 msgid "Down" msgstr "" -#: pysollib/wizardutil.py:170 pysollib/wizardutil.py:236 +#: pysollib/wizardutil.py:168 pysollib/wizardutil.py:234 msgid "Direction:" msgstr "" -#: pysollib/wizardutil.py:176 pysollib/wizardutil.py:248 +#: pysollib/wizardutil.py:174 pysollib/wizardutil.py:246 msgid "Wrapping:" msgstr "" -#: pysollib/wizardutil.py:181 pysollib/wizardutil.py:182 -#: pysollib/wizardutil.py:240 +#: pysollib/wizardutil.py:179 pysollib/wizardutil.py:180 +#: pysollib/wizardutil.py:238 msgid "Top card" msgstr "" -#: pysollib/wizardutil.py:181 pysollib/wizardutil.py:227 +#: pysollib/wizardutil.py:179 pysollib/wizardutil.py:225 msgid "None" msgstr "" -#: pysollib/wizardutil.py:183 pysollib/wizardutil.py:242 +#: pysollib/wizardutil.py:181 pysollib/wizardutil.py:240 msgid "Move:" msgstr "" -#: pysollib/wizardutil.py:189 -msgid "First card sets base rank:" +#: pysollib/wizardutil.py:187 +msgid "First card sets base cards:" msgstr "" -#: pysollib/wizardutil.py:197 +#: pysollib/wizardutil.py:195 msgid "Number of tableau piles:" msgstr "" -#: pysollib/wizardutil.py:205 +#: pysollib/wizardutil.py:203 msgid "Any suit but the same" msgstr "" -#: pysollib/wizardutil.py:207 +#: pysollib/wizardutil.py:205 msgid "Up or down by same suit" msgstr "" -#: pysollib/wizardutil.py:208 +#: pysollib/wizardutil.py:206 msgid "Up or down by alternate color" msgstr "" -#: pysollib/wizardutil.py:209 +#: pysollib/wizardutil.py:207 msgid "Up or down by rank" msgstr "" -#: pysollib/wizardutil.py:210 +#: pysollib/wizardutil.py:208 msgid "Up or down by same color" msgstr "" -#: pysollib/wizardutil.py:215 +#: pysollib/wizardutil.py:213 msgid "Yukon same suit" msgstr "" -#: pysollib/wizardutil.py:216 +#: pysollib/wizardutil.py:214 msgid "Yukon alternate color" msgstr "" -#: pysollib/wizardutil.py:217 +#: pysollib/wizardutil.py:215 msgid "Yukon rank" msgstr "" -#: pysollib/wizardutil.py:240 pysollib/wizardutil.py:241 +#: pysollib/wizardutil.py:238 pysollib/wizardutil.py:239 msgid "Sequence" msgstr "" -#: pysollib/wizardutil.py:255 +#: pysollib/wizardutil.py:253 msgid "Use \"Super Move\" feature:" msgstr "" -#: pysollib/wizardutil.py:263 +#: pysollib/wizardutil.py:261 msgid "Number of reserves:" msgstr "" -#: pysollib/wizardutil.py:270 +#: pysollib/wizardutil.py:268 msgid "Max # of accepted cards:" msgstr "" -#: pysollib/wizardutil.py:274 +#: pysollib/wizardutil.py:272 msgid "Triangle" msgstr "" -#: pysollib/wizardutil.py:275 pysollib/wizardutil.py:277 +#: pysollib/wizardutil.py:273 pysollib/wizardutil.py:275 msgid "Rectangle" msgstr "" -#: pysollib/wizardutil.py:285 +#: pysollib/wizardutil.py:283 msgid "# of face-down cards dealt to the tableau pile:" msgstr "" -#: pysollib/wizardutil.py:292 +#: pysollib/wizardutil.py:290 msgid "# of face-up cards dealt to the tableau pile:" msgstr "" -#: pysollib/wizardutil.py:299 +#: pysollib/wizardutil.py:297 msgid "# of cards dealt to the reserve:" msgstr "" -#: pysollib/wizardutil.py:306 +#: pysollib/wizardutil.py:304 msgid "Max # of dealt cards:" msgstr "" -#: pysollib/wizardutil.py:312 +#: pysollib/wizardutil.py:310 msgid "Deal first cards to the foundations:" msgstr "" -#: pysollib/wizardutil.py:318 +#: pysollib/wizardutil.py:316 msgid "General" msgstr "" -#: pysollib/wizardutil.py:324 +#: pysollib/wizardutil.py:322 msgid "Talon" msgstr "" -#: pysollib/wizardutil.py:329 +#: pysollib/wizardutil.py:327 msgid "Foundations" msgstr "" -#: pysollib/wizardutil.py:336 +#: pysollib/wizardutil.py:334 msgid "Tableau" msgstr "" -#: pysollib/wizardutil.py:344 +#: pysollib/wizardutil.py:342 msgid "Reserves" msgstr "" diff --git a/po/ru_games.po b/po/ru_games.po index 7d239a8c..5cbfbdde 100644 --- a/po/ru_games.po +++ b/po/ru_games.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: PySol 0.0.1\n" -"POT-Creation-Date: Thu May 10 14:22:52 2007\n" -"PO-Revision-Date: 2007-03-05 18:01+0300\n" +"POT-Creation-Date: Fri May 11 22:05:05 2007\n" +"PO-Revision-Date: 2007-05-11 17:25+0400\n" "Last-Translator: Скоморох \n" "Language-Team: Russian \n" "MIME-Version: 1.0\n" @@ -211,16 +211,14 @@ msgstr "Баланс" msgid "Balarama" msgstr "Баларама" -#, fuzzy msgid "Banner" -msgstr "Баланс" +msgstr "Флаг" msgid "Baroness" msgstr "Баронесса" -#, fuzzy msgid "Barrier" -msgstr "Причудливый" +msgstr "Барьер" msgid "Bastille Day" msgstr "День Бастилии" @@ -250,7 +248,7 @@ msgid "Beatle" msgstr "Жук" msgid "Bebop" -msgstr "" +msgstr "Бибоп" msgid "Beetle" msgstr "Жук" @@ -663,7 +661,7 @@ msgid "Crossroads" msgstr "Перекрестки" msgid "Crown" -msgstr "Венец" +msgstr "Корона" msgid "Cruel" msgstr "Изнурительный" @@ -729,9 +727,8 @@ msgstr "Der letzte Monarch" msgid "Deuces" msgstr "Двойки" -#, fuzzy msgid "Devil's Solitaire" -msgstr "Китайский пасьянс" +msgstr "Дьявольский пасьянс" msgid "Dhanpati" msgstr "Dhanpati" @@ -748,8 +745,8 @@ msgstr "Алмазный рудник" msgid "Die Bildgallerie" msgstr "Die Bildgallerie" -msgid "Die Königsbergerin" -msgstr "Die Königsbergerin" +msgid "Die Koenigsbergerin" +msgstr "Die Koenigsbergerin" msgid "Die Russische" msgstr "Die Russische" @@ -757,11 +754,8 @@ msgstr "Die Russische" msgid "Die Schlange" msgstr "Die Schlange" -msgid "Die böse Sieben" -msgstr "Die böse Sieben" - -msgid "Die große Harfe" -msgstr "Die große Harfe" +msgid "Die boese Sieben" +msgstr "Die boese Sieben" msgid "Die kleine Harfe" msgstr "Die kleine Harfe" @@ -2581,11 +2575,10 @@ msgid "Napoleon" msgstr "Наполеон" msgid "Napoleon Leaves Moscow" -msgstr "" +msgstr "Наполеон бежит из Москвы" -#, fuzzy msgid "Napoleon Takes Moscow" -msgstr "Гробница Наполеона" +msgstr "Наполеон идет на Москву" msgid "Napoleon at St.Helena" msgstr "Наполеон на острове св.Елена" @@ -2825,13 +2818,11 @@ msgstr "Перпетуум-мобиле" msgid "Perseverance" msgstr "Настойчивость" -#, fuzzy msgid "Persian Patience" -msgstr "Алжирский пасьянс" +msgstr "Персидский пасьянс" -#, fuzzy msgid "Phalanx" -msgstr "Реглан" +msgstr "Фаланга" msgid "Phantom Blockade" msgstr "Призрачная блокада" @@ -3019,9 +3010,8 @@ msgstr "Свита" msgid "Right Triangle" msgstr "Правый треугольник" -#, fuzzy msgid "Right and Left" -msgstr "Верхний и нижний" +msgstr "Справа и слева" msgid "Rings" msgstr "Круги" @@ -3139,7 +3129,7 @@ msgid "Scheidungsgrund" msgstr "Scheidungsgrund" msgid "School" -msgstr "" +msgstr "Школьный" msgid "Scorpion" msgstr "Скорпион" @@ -3602,22 +3592,20 @@ msgstr "Тринадцать вверх" msgid "Thirteens" msgstr "По тринадцать" -#, fuzzy msgid "Thirty" -msgstr "Тридцать шесть" +msgstr "Тридцать" msgid "Thirty Six" msgstr "Тридцать шесть" msgid "Thirty Two Cards" -msgstr "" +msgstr "Тридцать две карты" msgid "Three Blind Mice" msgstr "Три слепые мышки" -#, fuzzy msgid "Three Fir-trees" -msgstr "Три пирата" +msgstr "Три елки" msgid "Three Peaks" msgstr "Три вершины" @@ -3692,9 +3680,8 @@ msgstr "Маджонг Traditional Reviewed" msgid "Trapdoor" msgstr "Люк" -#, fuzzy msgid "Trapdoor Spider" -msgstr "Люк" +msgstr "Люк Паука" msgid "Treasure Trove" msgstr "Клад" @@ -3976,9 +3963,3 @@ msgstr "Зигзагообразный курс" msgid "Zodiac" msgstr "Зодиак" - -#~ msgid "Alternations" -#~ msgstr "Чередования" - -#~ msgid "Mahjongg Hurricane" -#~ msgstr "Маджонг Ураган" diff --git a/po/ru_pysol.po b/po/ru_pysol.po index c7915329..8b58469c 100644 --- a/po/ru_pysol.po +++ b/po/ru_pysol.po @@ -1,47 +1,49 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR ORGANIZATION -# FIRST AUTHOR , YEAR. +# Russian translations for PySolFC package +# Copyright (C) 2007 Skomoroh +# , 2007. # msgid "" msgstr "" -"Project-Id-Version: PySol 0.0.1\n" -"POT-Creation-Date: Thu May 10 14:24:01 2007\n" -"PO-Revision-Date: 2007-05-10 18:24+0400\n" -"Last-Translator: Скоморох \n" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: Fri May 11 22:06:13 2007\n" +"PO-Revision-Date: 2007-05-11 22:00+0400\n" +"Last-Translator: Skomoroh \n" "Language-Team: Russian \n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: utf-8\n" -"Generated-By: pygettext.py 1.5\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: pygettext.py 1.6con\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: pysollib/actions.py:264 pysollib/tile/toolbar.py:189 -#: pysollib/tk/toolbar.py:192 +#: pysollib/actions.py:263 pysollib/tile/toolbar.py:186 +#: pysollib/tk/toolbar.py:189 msgid "New game" msgstr "Новая игра" -#: pysollib/actions.py:277 pysollib/tile/menubar.py:851 -#: pysollib/tile/menubar.py:865 pysollib/tk/menubar.py:855 -#: pysollib/tk/menubar.py:869 +#: pysollib/actions.py:276 pysollib/tile/menubar.py:848 +#: pysollib/tile/menubar.py:862 pysollib/tk/menubar.py:852 +#: pysollib/tk/menubar.py:866 msgid "Select game" msgstr "Выбрать игру" -#: pysollib/actions.py:291 +#: pysollib/actions.py:290 msgid "Invalid game number" msgstr "Неправильный номер игры" -#: pysollib/actions.py:292 +#: pysollib/actions.py:291 msgid "Invalid game number\n" msgstr "Неправильный номер игры\n" -#: pysollib/actions.py:309 +#: pysollib/actions.py:308 msgid "Select next game number" msgstr "Выберите номер следующей игры" -#: pysollib/actions.py:318 pysollib/actions.py:328 +#: pysollib/actions.py:317 pysollib/actions.py:327 msgid "Select new game number" msgstr "Выберите номер новой игры" -#: pysollib/actions.py:319 +#: pysollib/actions.py:318 msgid "" "\n" "\n" @@ -51,22 +53,22 @@ msgstr "" "\n" "Введите номер новой игры" -#: pysollib/actions.py:320 +#: pysollib/actions.py:319 msgid "&Next number" msgstr "&Следующий номер" -#: pysollib/actions.py:320 pysollib/app.py:904 pysollib/app.py:1191 -#: pysollib/app.py:1203 pysollib/game.py:1030 pysollib/game.py:2293 +#: pysollib/actions.py:319 pysollib/app.py:903 pysollib/app.py:1190 +#: pysollib/app.py:1202 pysollib/game.py:1030 pysollib/game.py:2293 #: pysollib/tile/colorsdialog.py:112 pysollib/tile/edittextdialog.py:83 #: pysollib/tile/fontsdialog.py:144 pysollib/tile/fontsdialog.py:204 -#: pysollib/tile/gameinfodialog.py:155 pysollib/tile/menubar.py:1352 +#: pysollib/tile/gameinfodialog.py:155 pysollib/tile/menubar.py:1349 #: pysollib/tile/playeroptionsdialog.py:111 pysollib/tile/selectcardset.py:387 #: pysollib/tile/selecttile.py:161 pysollib/tile/soundoptionsdialog.py:168 #: pysollib/tile/soundoptionsdialog.py:206 pysollib/tile/timeoutsdialog.py:94 -#: pysollib/tile/tkhtml.py:504 pysollib/tile/tkstats.py:125 -#: pysollib/tile/tkstats.py:546 pysollib/tile/tkstats.py:645 -#: pysollib/tile/tkstats.py:727 pysollib/tile/tkwidget.py:154 -#: pysollib/tile/tkwidget.py:329 pysollib/tile/wizarddialog.py:143 +#: pysollib/tile/tkhtml.py:504 pysollib/tile/tkstats.py:123 +#: pysollib/tile/tkstats.py:544 pysollib/tile/tkstats.py:643 +#: pysollib/tile/tkstats.py:725 pysollib/tile/tkwidget.py:154 +#: pysollib/tile/tkwidget.py:329 pysollib/tile/wizarddialog.py:144 #: pysollib/tk/colorsdialog.py:111 pysollib/tk/edittextdialog.py:82 #: pysollib/tk/fontsdialog.py:143 pysollib/tk/fontsdialog.py:205 #: pysollib/tk/gameinfodialog.py:155 pysollib/tk/playeroptionsdialog.py:85 @@ -74,66 +76,66 @@ msgstr "&Следующий номер" #: pysollib/tk/selectcardset.py:397 pysollib/tk/selecttile.py:159 #: pysollib/tk/soundoptionsdialog.py:170 pysollib/tk/soundoptionsdialog.py:211 #: pysollib/tk/timeoutsdialog.py:92 pysollib/tk/tkhtml.py:500 -#: pysollib/tk/tkstats.py:291 pysollib/tk/tkstats.py:517 -#: pysollib/tk/tkstats.py:584 pysollib/tk/tkstats.py:599 -#: pysollib/tk/tkstats.py:641 pysollib/tk/tkstats.py:713 -#: pysollib/tk/tkstats.py:797 pysollib/tk/tkstats.py:971 +#: pysollib/tk/tkstats.py:289 pysollib/tk/tkstats.py:515 +#: pysollib/tk/tkstats.py:582 pysollib/tk/tkstats.py:597 +#: pysollib/tk/tkstats.py:639 pysollib/tk/tkstats.py:711 +#: pysollib/tk/tkstats.py:795 pysollib/tk/tkstats.py:969 #: pysollib/tk/tkwidget.py:160 pysollib/tk/tkwidget.py:324 -#: pysollib/tk/wizarddialog.py:136 +#: pysollib/tk/wizarddialog.py:137 msgid "&OK" msgstr "&ОК" -#: pysollib/actions.py:320 pysollib/app.py:905 pysollib/app.py:1203 +#: pysollib/actions.py:319 pysollib/app.py:904 pysollib/app.py:1202 #: pysollib/game.py:1030 pysollib/game.py:1694 pysollib/game.py:1710 #: pysollib/game.py:1717 pysollib/game.py:1723 #: pysollib/tile/colorsdialog.py:112 pysollib/tile/edittextdialog.py:83 #: pysollib/tile/fontsdialog.py:144 pysollib/tile/fontsdialog.py:204 #: pysollib/tile/playeroptionsdialog.py:111 pysollib/tile/selectcardset.py:237 -#: pysollib/tile/selectgame.py:267 pysollib/tile/selectgame.py:398 +#: pysollib/tile/selectgame.py:266 pysollib/tile/selectgame.py:397 #: pysollib/tile/selecttile.py:161 pysollib/tile/soundoptionsdialog.py:168 #: pysollib/tile/timeoutsdialog.py:94 pysollib/tile/tkwidget.py:329 -#: pysollib/tile/wizarddialog.py:143 pysollib/tk/colorsdialog.py:111 +#: pysollib/tile/wizarddialog.py:144 pysollib/tk/colorsdialog.py:111 #: pysollib/tk/edittextdialog.py:82 pysollib/tk/fontsdialog.py:143 -#: pysollib/tk/fontsdialog.py:205 pysollib/tk/menubar.py:1159 -#: pysollib/tk/menubar.py:1161 pysollib/tk/playeroptionsdialog.py:85 +#: pysollib/tk/fontsdialog.py:205 pysollib/tk/menubar.py:1156 +#: pysollib/tk/menubar.py:1158 pysollib/tk/playeroptionsdialog.py:85 #: pysollib/tk/playeroptionsdialog.py:160 pysollib/tk/selectcardset.py:241 -#: pysollib/tk/selectgame.py:266 pysollib/tk/selectgame.py:407 +#: pysollib/tk/selectgame.py:265 pysollib/tk/selectgame.py:406 #: pysollib/tk/selecttile.py:159 pysollib/tk/soundoptionsdialog.py:170 #: pysollib/tk/timeoutsdialog.py:92 pysollib/tk/tkwidget.py:324 -#: pysollib/tk/wizarddialog.py:136 +#: pysollib/tk/wizarddialog.py:137 msgid "&Cancel" msgstr "От&мена" -#: pysollib/actions.py:336 +#: pysollib/actions.py:335 msgid "Select random game" msgstr "Выбор случайной игры" -#: pysollib/actions.py:372 +#: pysollib/actions.py:371 msgid "Select next game" msgstr "Выбрать следующую игру" -#: pysollib/actions.py:405 pysollib/tile/toolbar.py:203 -#: pysollib/tk/toolbar.py:206 +#: pysollib/actions.py:404 pysollib/tile/toolbar.py:200 +#: pysollib/tk/toolbar.py:203 msgid "Quit " msgstr "Выйти из " -#: pysollib/actions.py:456 +#: pysollib/actions.py:455 msgid "Clear bookmarks" msgstr "Удалить закладки" -#: pysollib/actions.py:457 +#: pysollib/actions.py:456 msgid "Clear all bookmarks ?" msgstr "Удалить все закладки?" -#: pysollib/actions.py:467 +#: pysollib/actions.py:466 msgid "Restart game" msgstr "Начать игру с начала" -#: pysollib/actions.py:468 +#: pysollib/actions.py:467 msgid "Restart this game ?" msgstr "Начать игру с начала?" -#: pysollib/actions.py:514 +#: pysollib/actions.py:513 msgid "" "Comments for %s:\n" "\n" @@ -141,19 +143,19 @@ msgstr "" "Комментарий для %s:\n" "\n" -#: pysollib/actions.py:516 +#: pysollib/actions.py:515 msgid "Comments for " msgstr "Комментарий для " -#: pysollib/actions.py:534 pysollib/actions.py:562 +#: pysollib/actions.py:533 pysollib/actions.py:561 msgid "Error while writing to file" msgstr "Ошибка при записи в файл" -#: pysollib/actions.py:537 pysollib/actions.py:565 +#: pysollib/actions.py:536 pysollib/actions.py:564 msgid " Info" msgstr " Информация" -#: pysollib/actions.py:538 +#: pysollib/actions.py:537 msgid "" "Comments were appended to\n" "\n" @@ -161,15 +163,15 @@ msgstr "" "Комментарий добавлен в файл\n" "\n" -#: pysollib/actions.py:549 +#: pysollib/actions.py:548 msgid "Demo statistics" msgstr "Статистика демо" -#: pysollib/actions.py:552 +#: pysollib/actions.py:551 msgid "Your statistics" msgstr "Ваша статистика" -#: pysollib/actions.py:566 +#: pysollib/actions.py:565 msgid "" " were appended to\n" "\n" @@ -177,51 +179,51 @@ msgstr "" " добавлена в файл\n" "\n" -#: pysollib/actions.py:581 +#: pysollib/actions.py:580 msgid " Demo" msgstr " Демо" -#: pysollib/actions.py:581 +#: pysollib/actions.py:580 msgid " Demo " msgstr " Демо " -#: pysollib/actions.py:584 pysollib/actions.py:604 +#: pysollib/actions.py:583 pysollib/actions.py:603 msgid " for " msgstr " для " -#: pysollib/actions.py:590 pysollib/stats.py:205 +#: pysollib/actions.py:589 pysollib/stats.py:205 msgid "Statistics for " msgstr "Статистика игры " -#: pysollib/actions.py:594 pysollib/tile/selectgame.py:345 -#: pysollib/tile/tkstats.py:76 pysollib/tile/toolbar.py:200 -#: pysollib/tk/selectgame.py:350 pysollib/tk/toolbar.py:203 +#: pysollib/actions.py:593 pysollib/tile/selectgame.py:344 +#: pysollib/tile/tkstats.py:74 pysollib/tile/toolbar.py:197 +#: pysollib/tk/selectgame.py:349 pysollib/tk/toolbar.py:200 msgid "Statistics" msgstr "Статистика" -#: pysollib/actions.py:598 pysollib/tile/tkstats.py:528 +#: pysollib/actions.py:597 pysollib/tile/tkstats.py:526 #: data/glade-translations:31 msgid "Full log" msgstr "Полный лог" -#: pysollib/actions.py:601 pysollib/tile/tkstats.py:532 +#: pysollib/actions.py:600 pysollib/tile/tkstats.py:530 #: data/glade-translations:32 msgid "Session log" msgstr "Лог сессии" -#: pysollib/actions.py:607 +#: pysollib/actions.py:606 msgid "Game Info" msgstr "Информация об игре" -#: pysollib/actions.py:610 +#: pysollib/actions.py:609 msgid "Statistics progression" msgstr "Прогресс статистики" -#: pysollib/actions.py:626 +#: pysollib/actions.py:625 msgid "Reset all statistics" msgstr "Очистить всю статистику" -#: pysollib/actions.py:627 +#: pysollib/actions.py:626 msgid "" "Reset ALL statistics and logs for player\n" "%s ?" @@ -229,11 +231,11 @@ msgstr "" "Очистить всю статистику и лог для игрока\n" "%s?" -#: pysollib/actions.py:633 +#: pysollib/actions.py:632 msgid "Reset game statistics" msgstr "Очистить статистику игры" -#: pysollib/actions.py:634 +#: pysollib/actions.py:633 msgid "" "Reset statistics and logs for player\n" "%s\n" @@ -245,57 +247,57 @@ msgstr "" "и игры\n" "%s?" -#: pysollib/actions.py:690 +#: pysollib/actions.py:689 msgid "Play demo" msgstr "Показать демо" -#: pysollib/actions.py:701 +#: pysollib/actions.py:700 msgid "Set player options" msgstr "Установить настройки игрока" -#: pysollib/actions.py:715 data/glade-translations:40 +#: pysollib/actions.py:714 data/glade-translations:40 msgid "Set colors" msgstr "Настроить цвета" -#: pysollib/actions.py:732 +#: pysollib/actions.py:731 msgid "Set fonts" msgstr "Настроить шрифт" -#: pysollib/actions.py:741 data/glade-translations:33 +#: pysollib/actions.py:740 data/glade-translations:33 msgid "Set timeouts" msgstr "Настроить таймауты" -#: pysollib/app.py:90 +#: pysollib/app.py:89 msgid "Unknown" msgstr "Неизвестный" -#: pysollib/app.py:667 +#: pysollib/app.py:666 msgid "can't find game: " msgstr "" -#: pysollib/app.py:906 pysollib/game.py:1694 pysollib/game.py:1710 -#: pysollib/game.py:1717 pysollib/game.py:1723 pysollib/tile/menubar.py:359 -#: pysollib/tk/menubar.py:356 +#: pysollib/app.py:905 pysollib/game.py:1694 pysollib/game.py:1710 +#: pysollib/game.py:1717 pysollib/game.py:1723 pysollib/tile/menubar.py:356 +#: pysollib/tk/menubar.py:353 msgid "&New game" msgstr "&Новая игра" -#: pysollib/app.py:1049 +#: pysollib/app.py:1048 msgid "Loading %s %s..." msgstr "Загружается %s %s..." -#: pysollib/app.py:1088 +#: pysollib/app.py:1087 msgid " load error" msgstr " ошибка при загрузке" -#: pysollib/app.py:1089 +#: pysollib/app.py:1088 msgid "Error while loading " msgstr "Ошибка при загрузке" -#: pysollib/app.py:1183 +#: pysollib/app.py:1182 msgid "Incompatible " msgstr "Несовместимый " -#: pysollib/app.py:1185 +#: pysollib/app.py:1184 msgid "" "The currently selected %s %s\n" "is not compatible with the game\n" @@ -309,11 +311,11 @@ msgstr "" "\n" "Необходимо выбрать %s типа %s.\n" -#: pysollib/app.py:1201 +#: pysollib/app.py:1200 msgid "Please select a %s type %s" msgstr "Выберите %s типа %s" -#: pysollib/app.py:1428 +#: pysollib/app.py:1427 msgid "error loading plugin %s: %s" msgstr "" @@ -523,8 +525,8 @@ msgstr "" "\n" "Пожалуйста сообщите об этой ошибке." -#: pysollib/game.py:2861 pysollib/tile/menubar.py:1394 -#: pysollib/tk/menubar.py:1379 +#: pysollib/game.py:2861 pysollib/tile/menubar.py:1391 +#: pysollib/tk/menubar.py:1376 msgid "Save game error" msgstr "Ошибка при сохранении игры" @@ -549,212 +551,211 @@ msgid "" "in the current implementation." msgstr "" -#: pysollib/gamedb.py:122 +#: pysollib/gamedb.py:120 msgid "Baker's Dozen" msgstr "" -#: pysollib/gamedb.py:123 +#: pysollib/gamedb.py:121 msgid "Beleaguered Castle" msgstr "" -#: pysollib/gamedb.py:124 +#: pysollib/gamedb.py:122 msgid "Canfield" msgstr "" -#: pysollib/gamedb.py:125 +#: pysollib/gamedb.py:123 msgid "Fan" msgstr "" -#: pysollib/gamedb.py:126 +#: pysollib/gamedb.py:124 msgid "Forty Thieves" msgstr "" -#: pysollib/gamedb.py:127 pysollib/wizardutil.py:100 -#: pysollib/wizardutil.py:105 +#: pysollib/gamedb.py:125 pysollib/wizardutil.py:98 pysollib/wizardutil.py:103 msgid "FreeCell" msgstr "" -#: pysollib/gamedb.py:128 +#: pysollib/gamedb.py:126 msgid "Golf" msgstr "" -#: pysollib/gamedb.py:129 pysollib/wizardutil.py:102 +#: pysollib/gamedb.py:127 pysollib/wizardutil.py:100 msgid "Gypsy" msgstr "" -#: pysollib/gamedb.py:130 pysollib/wizardutil.py:101 +#: pysollib/gamedb.py:128 pysollib/wizardutil.py:99 msgid "Klondike" msgstr "" -#: pysollib/gamedb.py:131 +#: pysollib/gamedb.py:129 msgid "Montana" msgstr "" -#: pysollib/gamedb.py:132 +#: pysollib/gamedb.py:130 msgid "Napoleon" msgstr "" -#: pysollib/gamedb.py:133 +#: pysollib/gamedb.py:131 msgid "Numerica" msgstr "" -#: pysollib/gamedb.py:134 +#: pysollib/gamedb.py:132 msgid "Pairing" msgstr "" -#: pysollib/gamedb.py:135 +#: pysollib/gamedb.py:133 msgid "Raglan" msgstr "" -#: pysollib/gamedb.py:136 pysollib/gamedb.py:169 +#: pysollib/gamedb.py:134 pysollib/gamedb.py:167 msgid "Simple games" msgstr "Простые игры" -#: pysollib/gamedb.py:137 pysollib/wizardutil.py:114 +#: pysollib/gamedb.py:135 pysollib/wizardutil.py:112 msgid "Spider" msgstr "" -#: pysollib/gamedb.py:138 +#: pysollib/gamedb.py:136 msgid "Terrace" msgstr "" -#: pysollib/gamedb.py:139 +#: pysollib/gamedb.py:137 msgid "Yukon" msgstr "" -#: pysollib/gamedb.py:140 pysollib/gamedb.py:173 +#: pysollib/gamedb.py:138 pysollib/gamedb.py:171 msgid "One-Deck games" msgstr "Игры с одной колодой" -#: pysollib/gamedb.py:141 pysollib/gamedb.py:174 +#: pysollib/gamedb.py:139 pysollib/gamedb.py:172 msgid "Two-Deck games" msgstr "Игры с двумя колодами" -#: pysollib/gamedb.py:142 pysollib/gamedb.py:175 +#: pysollib/gamedb.py:140 pysollib/gamedb.py:173 msgid "Three-Deck games" msgstr "Игры с тремя колодами" -#: pysollib/gamedb.py:143 pysollib/gamedb.py:176 +#: pysollib/gamedb.py:141 pysollib/gamedb.py:174 msgid "Four-Deck games" msgstr "Игры с четырьмя колодами" -#: pysollib/gamedb.py:155 +#: pysollib/gamedb.py:153 msgid "Baker's Dozen type" msgstr "Игры типа Чёртова Дюжина (Baker's Dozen)" -#: pysollib/gamedb.py:156 +#: pysollib/gamedb.py:154 msgid "Beleaguered Castle type" msgstr "Игры типа Осаждённый Замок (Beleaguered Castle)" -#: pysollib/gamedb.py:157 +#: pysollib/gamedb.py:155 msgid "Canfield type" msgstr "Игры типа Кенфилд (Canfield)" -#: pysollib/gamedb.py:158 +#: pysollib/gamedb.py:156 msgid "Fan type" msgstr "Игры типа Веер (Fan)" -#: pysollib/gamedb.py:159 +#: pysollib/gamedb.py:157 msgid "Forty Thieves type" msgstr "Игры типа Сорок Воров (Forty Thieves)" -#: pysollib/gamedb.py:160 +#: pysollib/gamedb.py:158 msgid "FreeCell type" msgstr "Игры типа Свободная Ячейка (FreeCell)" -#: pysollib/gamedb.py:161 +#: pysollib/gamedb.py:159 msgid "Golf type" msgstr "Игры типа Гольф (Golf)" -#: pysollib/gamedb.py:162 +#: pysollib/gamedb.py:160 msgid "Gypsy type" msgstr "Игры типа Цыганский Пасьянс (Gypsy)" -#: pysollib/gamedb.py:163 +#: pysollib/gamedb.py:161 msgid "Klondike type" msgstr "Игры типа Клондайк (Klondike)" -#: pysollib/gamedb.py:164 +#: pysollib/gamedb.py:162 msgid "Montana type" msgstr "Игры типа Монтана (Montana)" -#: pysollib/gamedb.py:165 +#: pysollib/gamedb.py:163 msgid "Napoleon type" msgstr "Игры типа Наполеон (Napoleon)" -#: pysollib/gamedb.py:166 +#: pysollib/gamedb.py:164 msgid "Numerica type" msgstr "Игры числового типа (Numerica)" -#: pysollib/gamedb.py:167 +#: pysollib/gamedb.py:165 msgid "Pairing type" msgstr "Парные игры" -#: pysollib/gamedb.py:168 +#: pysollib/gamedb.py:166 msgid "Raglan type" msgstr "Игры типа Реглан (Raglan)" -#: pysollib/gamedb.py:170 +#: pysollib/gamedb.py:168 msgid "Spider type" msgstr "Игры типа Паук (Spider)" -#: pysollib/gamedb.py:171 +#: pysollib/gamedb.py:169 msgid "Terrace type" msgstr "Игры типа Терраса (Terrace)" -#: pysollib/gamedb.py:172 +#: pysollib/gamedb.py:170 msgid "Yukon type" msgstr "Игры типа Юкон (Yukon)" -#: pysollib/gamedb.py:180 pysollib/gamedb.py:188 +#: pysollib/gamedb.py:178 pysollib/gamedb.py:186 msgid "French type" msgstr "Классические" -#: pysollib/gamedb.py:181 pysollib/gamedb.py:189 pysollib/gamedb.py:197 +#: pysollib/gamedb.py:179 pysollib/gamedb.py:187 pysollib/gamedb.py:195 msgid "Ganjifa type" msgstr "Игры типа Ганджифа" -#: pysollib/gamedb.py:182 pysollib/gamedb.py:190 pysollib/gamedb.py:198 +#: pysollib/gamedb.py:180 pysollib/gamedb.py:188 pysollib/gamedb.py:196 msgid "Hanafuda type" msgstr "Игры типа Ханафуда" -#: pysollib/gamedb.py:183 pysollib/gamedb.py:191 pysollib/gamedb.py:205 +#: pysollib/gamedb.py:181 pysollib/gamedb.py:189 pysollib/gamedb.py:203 msgid "Hex A Deck type" msgstr "Игры типа Hex A Deck" -#: pysollib/gamedb.py:184 pysollib/gamedb.py:192 pysollib/gamedb.py:210 +#: pysollib/gamedb.py:182 pysollib/gamedb.py:190 pysollib/gamedb.py:208 msgid "Tarock type" msgstr "Таро" -#: pysollib/gamedb.py:196 +#: pysollib/gamedb.py:194 msgid "Dashavatara Ganjifa type" msgstr "Игры типа Дашаватара Ганджифа" -#: pysollib/gamedb.py:199 +#: pysollib/gamedb.py:197 msgid "Mughal Ganjifa type" msgstr "Игры типа Мугал Ганджифа" -#: pysollib/gamedb.py:200 +#: pysollib/gamedb.py:198 msgid "Navagraha Ganjifa type" msgstr "Игры типа Наваграха Ганджифа" -#: pysollib/gamedb.py:204 +#: pysollib/gamedb.py:202 msgid "Shisen-Sho" msgstr "Шисен-Сё" -#: pysollib/gamedb.py:206 +#: pysollib/gamedb.py:204 msgid "Matrix type" msgstr "Мозаика" -#: pysollib/gamedb.py:207 +#: pysollib/gamedb.py:205 msgid "Memory type" msgstr "Игры на запоминание" -#: pysollib/gamedb.py:208 +#: pysollib/gamedb.py:206 msgid "Poker type" msgstr "Покер" -#: pysollib/gamedb.py:209 +#: pysollib/gamedb.py:207 msgid "Puzzle type" msgstr "Пазлы" @@ -797,8 +798,8 @@ msgstr "" "4: 8 Д 3 7 В 2 6 10 Т 5 9 К" #: pysollib/games/canfield.py:528 pysollib/games/special/tarock.py:224 -#: pysollib/stack.py:1514 pysollib/util.py:85 pysollib/wizardutil.py:160 -#: pysollib/wizardutil.py:225 +#: pysollib/stack.py:1514 pysollib/util.py:85 pysollib/wizardutil.py:158 +#: pysollib/wizardutil.py:223 msgid "King" msgstr "Король" @@ -829,12 +830,12 @@ msgid "Waste. Build up or down regardless of suit." msgstr "Сброс. Складывать по возрастанию или убыванию не считаясь с мастью." #: pysollib/games/golf.py:117 pysollib/games/golf.py:305 -#: pysollib/stack.py:2268 +#: pysollib/stack.py:2269 msgid "Tableau. No building." msgstr "Игровой стол. Без выкладывания." #: pysollib/games/golf.py:390 pysollib/games/pileon.py:257 -#: pysollib/stack.py:2157 +#: pysollib/stack.py:2158 msgid "Foundation. Build up regardless of suit." msgstr "Базовая ячейка. Складывать по возрастанию не считаясь с мастью." @@ -919,13 +920,15 @@ msgid "Deal %d" msgstr "Сдача %d" #: pysollib/games/numerica.py:263 pysollib/games/royalcotillion.py:865 -#: pysollib/stack.py:2200 +#: pysollib/stack.py:2201 msgid "Foundation. Build up by color." msgstr "Базовая ячейка. Складывать по возрастанию в соответствии с цветом." #: pysollib/games/osmosis.py:67 pysollib/games/osmosis.py:167 msgid "Foundation. Build in suit regardless of rank." -msgstr "Базовая ячейка. Складывать в соответствии с мастью не считаясь с достоинством." +msgstr "" +"Базовая ячейка. Складывать в соответствии с мастью не считаясь с " +"достоинством." #: pysollib/games/special/memory.py:178 pysollib/games/special/poker.py:191 msgid "Points: %d" @@ -988,8 +991,8 @@ msgstr "Жезлы" #: pysollib/games/special/tarock.py:223 #: pysollib/games/ultra/dashavatara.py:351 #: pysollib/games/ultra/hexadeck.py:273 pysollib/games/ultra/mughal.py:254 -#: pysollib/stack.py:1515 pysollib/util.py:84 pysollib/wizardutil.py:159 -#: pysollib/wizardutil.py:163 pysollib/wizardutil.py:224 +#: pysollib/stack.py:1515 pysollib/util.py:84 pysollib/wizardutil.py:157 +#: pysollib/wizardutil.py:161 pysollib/wizardutil.py:222 msgid "Ace" msgstr "Туз" @@ -1260,7 +1263,7 @@ msgstr "Золото" msgid "Stores" msgstr "Резерв" -#: pysollib/games/ultra/mughal.py:253 pysollib/wizardutil.py:103 +#: pysollib/games/ultra/mughal.py:253 pysollib/wizardutil.py:101 msgid "Harp" msgstr "Арфа" @@ -1426,8 +1429,8 @@ msgstr "" "\n" "Пожалуйста проверьте установку %s.\n" -#: pysollib/main.py:73 pysollib/main.py:266 pysollib/tile/menubar.py:379 -#: pysollib/tk/menubar.py:376 +#: pysollib/main.py:73 pysollib/main.py:266 pysollib/tile/menubar.py:376 +#: pysollib/tk/menubar.py:373 msgid "&Quit" msgstr "В&ыход" @@ -1507,267 +1510,267 @@ msgstr "" msgid "Welcome to %s" msgstr "Добро пожаловать в %s" -#: pysollib/resource.py:192 +#: pysollib/resource.py:191 msgid "French type (52 cards)" msgstr "Классические (52 карты)" -#: pysollib/resource.py:193 +#: pysollib/resource.py:192 msgid "Hanafuda type (48 cards)" msgstr "Ханафуда (48 карт)" -#: pysollib/resource.py:194 +#: pysollib/resource.py:193 msgid "Tarock type (78 cards)" msgstr "Таро (78 карт)" -#: pysollib/resource.py:195 +#: pysollib/resource.py:194 msgid "Mahjongg type (42 tiles)" msgstr "Маджонг (42 фишки)" -#: pysollib/resource.py:196 +#: pysollib/resource.py:195 msgid "Hex A Deck type (68 cards)" msgstr "Hex A Deck (68 карт)" -#: pysollib/resource.py:197 +#: pysollib/resource.py:196 msgid "Mughal Ganjifa type (96 cards)" msgstr "Мугал Ганджифа (96 карт)" -#: pysollib/resource.py:198 +#: pysollib/resource.py:197 msgid "Navagraha Ganjifa type (108 cards)" msgstr "Наваграха Ганджифа (108 карт)" -#: pysollib/resource.py:199 +#: pysollib/resource.py:198 msgid "Dashavatara Ganjifa type (120 cards)" msgstr "Дашаватара Ганджифа (120 карт)" -#: pysollib/resource.py:200 +#: pysollib/resource.py:199 msgid "Trumps only type (variable cards)" msgstr "Без мастей (переменное количество карт)" -#: pysollib/resource.py:204 +#: pysollib/resource.py:203 msgid "French" msgstr "Классические" -#: pysollib/resource.py:205 pysollib/resource.py:229 +#: pysollib/resource.py:204 pysollib/resource.py:228 msgid "Hanafuda" msgstr "Ханафуда" -#: pysollib/resource.py:206 pysollib/resource.py:245 +#: pysollib/resource.py:205 pysollib/resource.py:244 msgid "Tarock" msgstr "Таро" -#: pysollib/resource.py:207 pysollib/resource.py:232 +#: pysollib/resource.py:206 pysollib/resource.py:231 msgid "Mahjongg" msgstr "Маджонг" -#: pysollib/resource.py:208 pysollib/resource.py:230 +#: pysollib/resource.py:207 pysollib/resource.py:229 msgid "Hex A Deck" msgstr "Hex A Deck" -#: pysollib/resource.py:209 +#: pysollib/resource.py:208 msgid "Mughal Ganjifa" msgstr "Мугал Ганджифа" -#: pysollib/resource.py:210 +#: pysollib/resource.py:209 msgid "Navagraha Ganjifa" msgstr "Наваграха Ганджифа" -#: pysollib/resource.py:211 +#: pysollib/resource.py:210 msgid "Dashavatara Ganjifa" msgstr "Дашаватара Ганджифа" -#: pysollib/resource.py:212 +#: pysollib/resource.py:211 msgid "Trumps only" msgstr "Без мастей" -#: pysollib/resource.py:217 +#: pysollib/resource.py:216 msgid "Adult" msgstr "Для взрослых" -#: pysollib/resource.py:218 +#: pysollib/resource.py:217 msgid "Animals" msgstr "Животные" -#: pysollib/resource.py:219 +#: pysollib/resource.py:218 msgid "Anime" msgstr "Мультфильмы" -#: pysollib/resource.py:220 +#: pysollib/resource.py:219 msgid "Art" msgstr "Искусство" -#: pysollib/resource.py:221 +#: pysollib/resource.py:220 msgid "Cartoons" msgstr "Комиксы" -#: pysollib/resource.py:222 +#: pysollib/resource.py:221 msgid "Children" msgstr "Дети" -#: pysollib/resource.py:223 +#: pysollib/resource.py:222 msgid "Classic look" msgstr "Классический вид" -#: pysollib/resource.py:224 +#: pysollib/resource.py:223 msgid "Collectors" msgstr "Коллекционные" -#: pysollib/resource.py:225 +#: pysollib/resource.py:224 msgid "Computers" msgstr "Компьютеры" -#: pysollib/resource.py:226 +#: pysollib/resource.py:225 msgid "Engines" msgstr "Машины" -#: pysollib/resource.py:227 +#: pysollib/resource.py:226 msgid "Fantasy" msgstr "Фэнтези" -#: pysollib/resource.py:228 +#: pysollib/resource.py:227 msgid "Ganjifa" msgstr "Ганджифа" -#: pysollib/resource.py:231 +#: pysollib/resource.py:230 msgid "Holiday" msgstr "Праздники" -#: pysollib/resource.py:233 +#: pysollib/resource.py:232 msgid "Movies" msgstr "Фильмы" -#: pysollib/resource.py:234 +#: pysollib/resource.py:233 msgid "Matrix" msgstr "Мозаика" -#: pysollib/resource.py:235 +#: pysollib/resource.py:234 msgid "Music" msgstr "Музыка" -#: pysollib/resource.py:236 +#: pysollib/resource.py:235 msgid "Nature" msgstr "Природа" -#: pysollib/resource.py:237 +#: pysollib/resource.py:236 msgid "Operating Systems" msgstr "Операционные системы" -#: pysollib/resource.py:238 +#: pysollib/resource.py:237 msgid "People" msgstr "Люди" -#: pysollib/resource.py:239 +#: pysollib/resource.py:238 msgid "Places" msgstr "Дома" -#: pysollib/resource.py:240 +#: pysollib/resource.py:239 msgid "Plain" msgstr "Простые" -#: pysollib/resource.py:241 +#: pysollib/resource.py:240 msgid "Products" msgstr "Продукты" -#: pysollib/resource.py:242 +#: pysollib/resource.py:241 msgid "Round cardsets" msgstr "Закруглённые" -#: pysollib/resource.py:243 +#: pysollib/resource.py:242 msgid "Science Fiction" msgstr "Научная фантастика" -#: pysollib/resource.py:244 +#: pysollib/resource.py:243 msgid "Sports" msgstr "Спорт" -#: pysollib/resource.py:246 +#: pysollib/resource.py:245 msgid "Vehicels" msgstr "Транспортные средства" -#: pysollib/resource.py:247 +#: pysollib/resource.py:246 msgid "Video Games" msgstr "Видеоигры" -#: pysollib/resource.py:252 +#: pysollib/resource.py:251 msgid "Australia" msgstr "Австралия" -#: pysollib/resource.py:253 +#: pysollib/resource.py:252 msgid "Austria" msgstr "Австрия" -#: pysollib/resource.py:254 +#: pysollib/resource.py:253 msgid "Belgium" msgstr "Бельгия" -#: pysollib/resource.py:255 +#: pysollib/resource.py:254 msgid "Canada" msgstr "Канада" -#: pysollib/resource.py:256 +#: pysollib/resource.py:255 msgid "China" msgstr "Китай" -#: pysollib/resource.py:257 +#: pysollib/resource.py:256 msgid "Czech Republic" msgstr "Чехия" -#: pysollib/resource.py:258 +#: pysollib/resource.py:257 msgid "Denmark" msgstr "Дания" -#: pysollib/resource.py:259 +#: pysollib/resource.py:258 msgid "England" msgstr "Англия" -#: pysollib/resource.py:260 +#: pysollib/resource.py:259 msgid "France" msgstr "Франция" -#: pysollib/resource.py:261 +#: pysollib/resource.py:260 msgid "Germany" msgstr "Германия" -#: pysollib/resource.py:262 +#: pysollib/resource.py:261 msgid "Great Britain" msgstr "Великобритания" -#: pysollib/resource.py:263 +#: pysollib/resource.py:262 msgid "Hungary" msgstr "Венгрия" -#: pysollib/resource.py:264 +#: pysollib/resource.py:263 msgid "India" msgstr "Индия" -#: pysollib/resource.py:265 +#: pysollib/resource.py:264 msgid "Italy" msgstr "Италия" -#: pysollib/resource.py:266 +#: pysollib/resource.py:265 msgid "Japan" msgstr "Япония" -#: pysollib/resource.py:267 +#: pysollib/resource.py:266 msgid "Netherlands" msgstr "Голландия" -#: pysollib/resource.py:268 +#: pysollib/resource.py:267 msgid "Russia" msgstr "Россия" -#: pysollib/resource.py:269 +#: pysollib/resource.py:268 msgid "Spain" msgstr "Испания" -#: pysollib/resource.py:270 +#: pysollib/resource.py:269 msgid "Sweden" msgstr "Швеция" -#: pysollib/resource.py:271 +#: pysollib/resource.py:270 msgid "Switzerland" msgstr "Швейцария" -#: pysollib/resource.py:272 +#: pysollib/resource.py:271 msgid "USA" msgstr "США" @@ -1791,17 +1794,16 @@ msgstr "любая карта" msgid "Jack" msgstr "Валет" -#: pysollib/stack.py:1521 +#: pysollib/stack.py:1522 msgid "No cards" msgstr "Нет карт" -#: pysollib/stack.py:1522 -msgid "1 card" -msgstr "1 карта" - #: pysollib/stack.py:1523 -msgid " cards" -msgstr " карт" +msgid "%d card" +msgid_plural "%d cards" +msgstr[0] "%d карта" +msgstr[1] "%d карты" +msgstr[2] "%d карт" #: pysollib/stack.py:1735 pysollib/stack.py:1737 pysollib/stack.py:1773 msgid "Redeal" @@ -1811,114 +1813,109 @@ msgstr "Сдать" msgid "Stop" msgstr "Стоп" -#: pysollib/stack.py:1798 +#: pysollib/stack.py:1799 msgid "Variable redeals." msgstr "Переменное количество пересдач." -#: pysollib/stack.py:1799 +#: pysollib/stack.py:1800 msgid "Unlimited redeals." msgstr "Неограниченное количество пересдач." -#: pysollib/stack.py:1800 -msgid "No redeals." -msgstr "Без пересдачи." +#: pysollib/stack.py:1803 +msgid "%d readeal" +msgid_plural "%d redeals" +msgstr[0] "%d пересдача" +msgstr[1] "%d пересдачи" +msgstr[2] "%d пересдач" -#: pysollib/stack.py:1801 -msgid "One redeal." -msgstr "1 пересдача." - -#: pysollib/stack.py:1802 -msgid " redeals." -msgstr " пересдачи." - -#: pysollib/stack.py:1804 +#: pysollib/stack.py:1805 msgid "Talon." msgstr "Колода." -#: pysollib/stack.py:2070 pysollib/stack.py:2717 +#: pysollib/stack.py:2071 pysollib/stack.py:2718 msgid "Reserve. No building." msgstr "Резерв. Без выкладывания." -#: pysollib/stack.py:2108 +#: pysollib/stack.py:2109 msgid "Foundation." msgstr "Базовая ячейка" -#: pysollib/stack.py:2146 +#: pysollib/stack.py:2147 msgid "Foundation. Build up by suit." msgstr "Базовая ячейка. Складывать по возрастанию в соответствии с мастью." -#: pysollib/stack.py:2147 +#: pysollib/stack.py:2148 msgid "Foundation. Build down by suit." msgstr "Базовая ячейка. Складывать по убыванию в соответствии с мастью." -#: pysollib/stack.py:2148 pysollib/stack.py:2159 pysollib/stack.py:2181 -#: pysollib/stack.py:2202 +#: pysollib/stack.py:2149 pysollib/stack.py:2160 pysollib/stack.py:2182 +#: pysollib/stack.py:2203 msgid "Foundation. Build by same rank." msgstr "Базовая ячейка. Складывать в соответствии с достоинством." -#: pysollib/stack.py:2158 +#: pysollib/stack.py:2159 msgid "Foundation. Build down regardless of suit." msgstr "Базовая ячейка. Складывать не считаясь с мастью." -#: pysollib/stack.py:2179 +#: pysollib/stack.py:2180 msgid "Foundation. Build up by alternate color." msgstr "Базовая ячейка. Складывать по возрастанию чередуя цвет." -#: pysollib/stack.py:2180 +#: pysollib/stack.py:2181 msgid "Foundation. Build down by alternate color." msgstr "Базовая ячейка. Складывать по убыванию чередуя цвет." -#: pysollib/stack.py:2201 +#: pysollib/stack.py:2202 msgid "Foundation. Build down by color." msgstr "Базовая ячейка. Складывать по убыванию в соответствии с цветом." -#: pysollib/stack.py:2310 +#: pysollib/stack.py:2311 msgid "Tableau. Build up by alternate color." msgstr "Игровой стол. Складывать по возрастанию чередуя цвет." -#: pysollib/stack.py:2311 +#: pysollib/stack.py:2312 msgid "Tableau. Build down by alternate color." msgstr "Игровой стол. Складывать по убыванию чередуя цвет." -#: pysollib/stack.py:2312 pysollib/stack.py:2322 pysollib/stack.py:2331 -#: pysollib/stack.py:2340 pysollib/stack.py:2350 pysollib/stack.py:2379 -#: pysollib/stack.py:2389 +#: pysollib/stack.py:2313 pysollib/stack.py:2323 pysollib/stack.py:2332 +#: pysollib/stack.py:2341 pysollib/stack.py:2351 pysollib/stack.py:2380 +#: pysollib/stack.py:2390 msgid "Tableau. Build by same rank." msgstr "Игровой стол. Складывать в соответствии с достоинством." -#: pysollib/stack.py:2320 +#: pysollib/stack.py:2321 msgid "Tableau. Build up by color." msgstr "Игровой стол. Складывать по возрастанию в соответствии с цветом." -#: pysollib/stack.py:2321 +#: pysollib/stack.py:2322 msgid "Tableau. Build down by color." msgstr "Игровой стол. Складывать по убыванию в соответствии с цветом." -#: pysollib/stack.py:2329 +#: pysollib/stack.py:2330 msgid "Tableau. Build up by suit." msgstr "Игровой стол. Складывать по возрастанию в соответствии с мастью." -#: pysollib/stack.py:2330 +#: pysollib/stack.py:2331 msgid "Tableau. Build down by suit." msgstr "Игровой стол. Складывать по убыванию в соответствии с мастью." -#: pysollib/stack.py:2338 +#: pysollib/stack.py:2339 msgid "Tableau. Build up regardless of suit." msgstr "Игровой стол. Складывать по возрастанию не считаясь с мастью." -#: pysollib/stack.py:2339 +#: pysollib/stack.py:2340 msgid "Tableau. Build down regardless of suit." msgstr "Игровой стол. Складывать по убыванию не считаясь с мастью." -#: pysollib/stack.py:2348 +#: pysollib/stack.py:2349 msgid "Tableau. Build up in any suit but the same." msgstr "Игровой стол. Складывать по возрастанию в любую масть кроме такой же." -#: pysollib/stack.py:2349 +#: pysollib/stack.py:2350 msgid "Tableau. Build down in any suit but the same." msgstr "Игровой стол. Складывать по убыванию в любую масть кроме такой же." -#: pysollib/stack.py:2377 +#: pysollib/stack.py:2378 msgid "" "Tableau. Build up regardless of suit. Sequences of cards in alternate color " "can be moved as a unit." @@ -1926,7 +1923,7 @@ msgstr "" "Игровой стол. Складывать по возрастанию не считаясь с мастью. Можно " "перемещать серии карт чередующихся цветом." -#: pysollib/stack.py:2378 +#: pysollib/stack.py:2379 msgid "" "Tableau. Build down regardless of suit. Sequences of cards in alternate " "color can be moved as a unit." @@ -1934,7 +1931,7 @@ msgstr "" "Игровой стол. Складывать по убыванию не считаясь с мастью. Можно перемещать " "серии карт чередующихся цветом." -#: pysollib/stack.py:2387 +#: pysollib/stack.py:2388 msgid "" "Tableau. Build up regardless of suit. Sequences of cards in the same suit " "can be moved as a unit." @@ -1942,7 +1939,7 @@ msgstr "" "Игровой стол. Складывать по возрастанию не считаясь с мастью. Можно " "перемещать серии карт одинаковой масти." -#: pysollib/stack.py:2388 +#: pysollib/stack.py:2389 msgid "" "Tableau. Build down regardless of suit. Sequences of cards in the same suit " "can be moved as a unit." @@ -1950,7 +1947,7 @@ msgstr "" "Игровой стол. Складывать по убыванию не считаясь с мастью. Можно перемещать " "серии карт одинаковой масти." -#: pysollib/stack.py:2410 +#: pysollib/stack.py:2411 msgid "" "Tableau. Build up by alternate color, can move any face-up cards regardless " "of sequence." @@ -1958,7 +1955,7 @@ msgstr "" "Игровой стол. Складывать по возрастанию чередуя цвет, можно перемещать любую " "серию открытых карт." -#: pysollib/stack.py:2411 +#: pysollib/stack.py:2412 msgid "" "Tableau. Build down by alternate color, can move any face-up cards " "regardless of sequence." @@ -1966,7 +1963,7 @@ msgstr "" "Игровой стол. Складывать по убыванию чередуя цвет, можно перемещать любую " "серию открытых карт." -#: pysollib/stack.py:2412 pysollib/stack.py:2425 pysollib/stack.py:2435 +#: pysollib/stack.py:2413 pysollib/stack.py:2426 pysollib/stack.py:2436 msgid "" "Tableau. Build by same rank, can move any face-up cards regardless of " "sequence." @@ -1974,14 +1971,14 @@ msgstr "" "Игровой стол. Складывать в соответствии с достоинством, можно перемещать " "любую серию открытых карт." -#: pysollib/stack.py:2423 +#: pysollib/stack.py:2424 msgid "" "Tableau. Build up by suit, can move any face-up cards regardless of sequence." msgstr "" "Игровой стол. Складывать по возрастанию в соответствии с мастью, можно " "перемещать любую серию открытых карт." -#: pysollib/stack.py:2424 +#: pysollib/stack.py:2425 msgid "" "Tableau. Build down by suit, can move any face-up cards regardless of " "sequence." @@ -1989,7 +1986,7 @@ msgstr "" "Игровой стол. Складывать по убыванию в соответствии с мастью, можно " "перемещать любую серию открытых карт." -#: pysollib/stack.py:2433 pysollib/stack.py:2434 +#: pysollib/stack.py:2434 pysollib/stack.py:2435 msgid "" "Tableau. Build up regardless of suit, can move any face-up cards regardless " "of sequence." @@ -1997,48 +1994,48 @@ msgstr "" "Игровой стол. Складывать по возрастанию не считаясь с мастью, можно " "перемещать любую серию открытых карт." -#: pysollib/stack.py:2467 +#: pysollib/stack.py:2468 msgid "Tableau. Build up or down by color." msgstr "" "Игровой стол. Складывать по возрастанию или убыванию в соответствии с цветом." -#: pysollib/stack.py:2478 +#: pysollib/stack.py:2479 msgid "Tableau. Build up or down by alternate color." msgstr "Игровой стол. Складывать по возрастанию или убыванию чередуя цвет." -#: pysollib/stack.py:2489 +#: pysollib/stack.py:2490 msgid "Tableau. Build up or down by suit." msgstr "" "Игровой стол. Складывать по возрастанию или убыванию в соответствии с мастью." -#: pysollib/stack.py:2500 +#: pysollib/stack.py:2501 msgid "Tableau. Build up or down regardless of suit." msgstr "" "Игровой стол. Складывать по возрастанию или убыванию не считаясь с мастью." -#: pysollib/stack.py:2601 +#: pysollib/stack.py:2602 msgid "Waste." msgstr "Сброс." -#: pysollib/stack.py:2718 +#: pysollib/stack.py:2719 msgid "Free cell." msgstr "Свободная ячейка." -#: pysollib/stats.py:52 pysollib/stats.py:118 pysollib/tile/tkstats.py:675 +#: pysollib/stats.py:52 pysollib/stats.py:118 pysollib/tile/tkstats.py:673 msgid "Game" msgstr "Игра" -#: pysollib/stats.py:53 pysollib/tile/tkstats.py:906 -#: pysollib/tile/tkstats.py:979 pysollib/tile/tkstats.py:980 -#: pysollib/tk/tkstats.py:887 pysollib/tk/tkstats.py:888 -#: pysollib/tk/tkstats.py:941 +#: pysollib/stats.py:53 pysollib/tile/tkstats.py:904 +#: pysollib/tile/tkstats.py:977 pysollib/tile/tkstats.py:978 +#: pysollib/tk/tkstats.py:885 pysollib/tk/tkstats.py:886 +#: pysollib/tk/tkstats.py:939 msgid "Played" msgstr "Играл" -#: pysollib/stats.py:54 pysollib/stats.py:157 pysollib/tile/tkstats.py:913 -#: pysollib/tile/tkstats.py:984 pysollib/tile/tkstats.py:985 -#: pysollib/tk/tkstats.py:892 pysollib/tk/tkstats.py:893 -#: pysollib/tk/tkstats.py:949 +#: pysollib/stats.py:54 pysollib/stats.py:157 pysollib/tile/tkstats.py:911 +#: pysollib/tile/tkstats.py:982 pysollib/tile/tkstats.py:983 +#: pysollib/tk/tkstats.py:890 pysollib/tk/tkstats.py:891 +#: pysollib/tk/tkstats.py:947 msgid "Won" msgstr "Выиграл" @@ -2055,11 +2052,11 @@ msgstr "Время игры" msgid "Moves" msgstr "Ходов" -#: pysollib/stats.py:58 pysollib/tile/tkstats.py:920 -#: pysollib/tile/tkstats.py:952 pysollib/tile/tkstats.py:971 -#: pysollib/tile/tkstats.py:989 pysollib/tk/tkstats.py:860 -#: pysollib/tk/tkstats.py:879 pysollib/tk/tkstats.py:897 -#: pysollib/tk/tkstats.py:957 +#: pysollib/stats.py:58 pysollib/tile/tkstats.py:918 +#: pysollib/tile/tkstats.py:950 pysollib/tile/tkstats.py:969 +#: pysollib/tile/tkstats.py:987 pysollib/tk/tkstats.py:858 +#: pysollib/tk/tkstats.py:877 pysollib/tk/tkstats.py:895 +#: pysollib/tk/tkstats.py:955 msgid "% won" msgstr "% побед" @@ -2068,17 +2065,17 @@ msgid "Status" msgstr "Статус" #: pysollib/stats.py:118 pysollib/tile/statusbar.py:152 -#: pysollib/tile/tkstats.py:678 pysollib/tk/statusbar.py:163 -#: pysollib/tk/tkstats.py:671 +#: pysollib/tile/tkstats.py:676 pysollib/tk/statusbar.py:163 +#: pysollib/tk/tkstats.py:669 msgid "Game number" msgstr "Номер игры" -#: pysollib/stats.py:118 pysollib/tile/tkstats.py:681 -#: pysollib/tk/tkstats.py:674 +#: pysollib/stats.py:118 pysollib/tile/tkstats.py:679 +#: pysollib/tk/tkstats.py:672 msgid "Started at" msgstr "Игра начата" -#: pysollib/stats.py:142 pysollib/tile/tkstats.py:697 +#: pysollib/stats.py:142 pysollib/tile/tkstats.py:695 msgid "** UNKNOWN %d **" msgstr "" @@ -2102,8 +2099,8 @@ msgstr "Великолепная" msgid "Demo" msgstr "Демо" -#: pysollib/stats.py:215 pysollib/tile/tkstats.py:386 -#: pysollib/tk/tkstats.py:422 +#: pysollib/stats.py:215 pysollib/tile/tkstats.py:384 +#: pysollib/tk/tkstats.py:420 msgid "Total (%d out of %d games)" msgstr "Всего (%d из %d игр)" @@ -2233,514 +2230,514 @@ msgstr "Игровой стол маленький: " msgid "Select font" msgstr "Выбрать шрифт" -#: pysollib/tile/menubar.py:82 pysollib/tk/menubar.py:80 +#: pysollib/tile/menubar.py:79 pysollib/tk/menubar.py:77 msgid "Style" msgstr "Стиль" -#: pysollib/tile/menubar.py:90 pysollib/tk/menubar.py:89 +#: pysollib/tile/menubar.py:87 pysollib/tk/menubar.py:86 msgid "Compound" msgstr "Компоновка" -#: pysollib/tile/menubar.py:96 pysollib/tk/menubar.py:95 +#: pysollib/tile/menubar.py:93 pysollib/tk/menubar.py:92 msgid "Hide" msgstr "Спрятать" -#: pysollib/tile/menubar.py:99 pysollib/tk/menubar.py:98 +#: pysollib/tile/menubar.py:96 pysollib/tk/menubar.py:95 msgid "Top" msgstr "Сверху" -#: pysollib/tile/menubar.py:102 pysollib/tk/menubar.py:101 +#: pysollib/tile/menubar.py:99 pysollib/tk/menubar.py:98 msgid "Bottom" msgstr "Внизу" -#: pysollib/tile/menubar.py:105 pysollib/tk/menubar.py:104 +#: pysollib/tile/menubar.py:102 pysollib/tk/menubar.py:101 msgid "Left" msgstr "Слева" -#: pysollib/tile/menubar.py:108 pysollib/tk/menubar.py:107 +#: pysollib/tile/menubar.py:105 pysollib/tk/menubar.py:104 msgid "Right" msgstr "Справа" -#: pysollib/tile/menubar.py:112 pysollib/tk/menubar.py:111 +#: pysollib/tile/menubar.py:109 pysollib/tk/menubar.py:108 msgid "Small icons" msgstr "Маленькие пиктограммы" -#: pysollib/tile/menubar.py:115 pysollib/tk/menubar.py:114 +#: pysollib/tile/menubar.py:112 pysollib/tk/menubar.py:111 msgid "Large icons" msgstr "Большие пиктограммы" -#: pysollib/tile/menubar.py:121 pysollib/tk/menubar.py:120 +#: pysollib/tile/menubar.py:118 pysollib/tk/menubar.py:117 msgid "Visible buttons" msgstr "Показывать кнопки" -#: pysollib/tile/menubar.py:356 pysollib/tile/menubar.py:525 -#: pysollib/tk/menubar.py:353 pysollib/tk/menubar.py:529 +#: pysollib/tile/menubar.py:353 pysollib/tile/menubar.py:522 +#: pysollib/tk/menubar.py:350 pysollib/tk/menubar.py:526 msgid "&About " msgstr "&О программе " -#: pysollib/tile/menubar.py:358 pysollib/tk/menubar.py:355 +#: pysollib/tile/menubar.py:355 pysollib/tk/menubar.py:352 msgid "&File" msgstr "&Файл" -#: pysollib/tile/menubar.py:360 pysollib/tk/menubar.py:357 +#: pysollib/tile/menubar.py:357 pysollib/tk/menubar.py:354 msgid "R&ecent games" msgstr "Выбрать н&едавнюю игру" -#: pysollib/tile/menubar.py:362 pysollib/tk/menubar.py:359 +#: pysollib/tile/menubar.py:359 pysollib/tk/menubar.py:356 msgid "Select &random game" msgstr "С&лучайная игра" -#: pysollib/tile/menubar.py:363 pysollib/tk/menubar.py:360 +#: pysollib/tile/menubar.py:360 pysollib/tk/menubar.py:357 msgid "&All games" msgstr "&Все игры" -#: pysollib/tile/menubar.py:364 pysollib/tk/menubar.py:361 +#: pysollib/tile/menubar.py:361 pysollib/tk/menubar.py:358 msgid "Games played and &won" msgstr "&Выигранные игры" -#: pysollib/tile/menubar.py:365 pysollib/tk/menubar.py:362 +#: pysollib/tile/menubar.py:362 pysollib/tk/menubar.py:359 msgid "Games played and ¬ won" msgstr "&Невыигранные игры" -#: pysollib/tile/menubar.py:366 pysollib/tk/menubar.py:363 +#: pysollib/tile/menubar.py:363 pysollib/tk/menubar.py:360 msgid "Games not &played" msgstr "Не&сыгранные игры" -#: pysollib/tile/menubar.py:367 pysollib/tk/menubar.py:364 +#: pysollib/tile/menubar.py:364 pysollib/tk/menubar.py:361 msgid "Select game by nu&mber..." msgstr "Выбрать игру по &номеру..." -#: pysollib/tile/menubar.py:369 pysollib/tk/menubar.py:366 +#: pysollib/tile/menubar.py:366 pysollib/tk/menubar.py:363 msgid "Fa&vorite games" msgstr "&Избранные игры" -#: pysollib/tile/menubar.py:370 pysollib/tk/menubar.py:367 +#: pysollib/tile/menubar.py:367 pysollib/tk/menubar.py:364 msgid "A&dd to favorites" msgstr "&Добавить в избранное" -#: pysollib/tile/menubar.py:371 pysollib/tk/menubar.py:368 +#: pysollib/tile/menubar.py:368 pysollib/tk/menubar.py:365 msgid "Remove &from favorites" msgstr "&Удалить из избранных" -#: pysollib/tile/menubar.py:373 pysollib/tk/menubar.py:370 +#: pysollib/tile/menubar.py:370 pysollib/tk/menubar.py:367 msgid "&Open..." msgstr "&Открыть..." -#: pysollib/tile/menubar.py:374 pysollib/tk/menubar.py:371 +#: pysollib/tile/menubar.py:371 pysollib/tk/menubar.py:368 msgid "&Save" msgstr "&Сохранить" -#: pysollib/tile/menubar.py:375 pysollib/tk/menubar.py:372 +#: pysollib/tile/menubar.py:372 pysollib/tk/menubar.py:369 msgid "Save &as..." msgstr "Сохранить &как..." -#: pysollib/tile/menubar.py:377 pysollib/tk/menubar.py:374 +#: pysollib/tile/menubar.py:374 pysollib/tk/menubar.py:371 msgid "&Hold and quit" msgstr "Со&храниться и выйти" -#: pysollib/tile/menubar.py:383 pysollib/tile/selectgame.py:398 -#: pysollib/tk/menubar.py:380 pysollib/tk/selectgame.py:407 +#: pysollib/tile/menubar.py:380 pysollib/tile/selectgame.py:397 +#: pysollib/tk/menubar.py:377 pysollib/tk/selectgame.py:406 msgid "&Select" msgstr "&Выбрать" -#: pysollib/tile/menubar.py:388 pysollib/tk/menubar.py:385 +#: pysollib/tile/menubar.py:385 pysollib/tk/menubar.py:382 msgid "&Edit" msgstr "Р&едактировать" -#: pysollib/tile/menubar.py:389 pysollib/tk/menubar.py:386 +#: pysollib/tile/menubar.py:386 pysollib/tk/menubar.py:383 msgid "&Undo" msgstr "&Отмена" -#: pysollib/tile/menubar.py:390 pysollib/tk/menubar.py:387 +#: pysollib/tile/menubar.py:387 pysollib/tk/menubar.py:384 msgid "&Redo" msgstr "&Повтор" -#: pysollib/tile/menubar.py:391 pysollib/tk/menubar.py:388 +#: pysollib/tile/menubar.py:388 pysollib/tk/menubar.py:385 msgid "Redo &all" msgstr "Вернуть все" -#: pysollib/tile/menubar.py:394 pysollib/tk/menubar.py:391 +#: pysollib/tile/menubar.py:391 pysollib/tk/menubar.py:388 msgid "&Set bookmark" msgstr "Установить &закладку" -#: pysollib/tile/menubar.py:396 pysollib/tile/menubar.py:400 -#: pysollib/tk/menubar.py:393 pysollib/tk/menubar.py:397 +#: pysollib/tile/menubar.py:393 pysollib/tile/menubar.py:397 +#: pysollib/tk/menubar.py:390 pysollib/tk/menubar.py:394 msgid "Bookmark %d" msgstr "Закладка %d" -#: pysollib/tile/menubar.py:398 pysollib/tk/menubar.py:395 +#: pysollib/tile/menubar.py:395 pysollib/tk/menubar.py:392 msgid "Go&to bookmark" msgstr "&Перейти к закладке" -#: pysollib/tile/menubar.py:403 pysollib/tk/menubar.py:400 +#: pysollib/tile/menubar.py:400 pysollib/tk/menubar.py:397 msgid "&Clear bookmarks" msgstr "О&чистить закладки" -#: pysollib/tile/menubar.py:406 pysollib/tile/toolbar.py:190 -#: pysollib/tk/menubar.py:403 pysollib/tk/toolbar.py:193 +#: pysollib/tile/menubar.py:403 pysollib/tile/toolbar.py:187 +#: pysollib/tk/menubar.py:400 pysollib/tk/toolbar.py:190 msgid "Restart" msgstr "Начало" -#: pysollib/tile/menubar.py:409 pysollib/tk/menubar.py:406 +#: pysollib/tile/menubar.py:406 pysollib/tk/menubar.py:403 msgid "Solitaire &Wizard" msgstr "Конструктор пасьянсов" -#: pysollib/tile/menubar.py:410 pysollib/tk/menubar.py:407 +#: pysollib/tile/menubar.py:407 pysollib/tk/menubar.py:404 msgid "&Edit current game" msgstr "Редактировать текущую игру" -#: pysollib/tile/menubar.py:412 pysollib/tk/menubar.py:409 +#: pysollib/tile/menubar.py:409 pysollib/tk/menubar.py:406 msgid "&Game" msgstr "&Игра" -#: pysollib/tile/menubar.py:413 pysollib/tk/menubar.py:410 +#: pysollib/tile/menubar.py:410 pysollib/tk/menubar.py:407 msgid "&Deal cards" msgstr "&Сдать карты" -#: pysollib/tile/menubar.py:414 pysollib/tk/menubar.py:411 +#: pysollib/tile/menubar.py:411 pysollib/tk/menubar.py:408 msgid "&Auto drop" msgstr "С&бросить карты" -#: pysollib/tile/menubar.py:415 pysollib/tk/menubar.py:412 +#: pysollib/tile/menubar.py:412 pysollib/tk/menubar.py:409 msgid "&Pause" msgstr "&Пауза" -#: pysollib/tile/menubar.py:418 pysollib/tk/menubar.py:415 +#: pysollib/tile/menubar.py:415 pysollib/tk/menubar.py:412 msgid "S&tatus..." msgstr "С&татус" -#: pysollib/tile/menubar.py:419 pysollib/tk/menubar.py:416 +#: pysollib/tile/menubar.py:416 pysollib/tk/menubar.py:413 msgid "&Comments..." msgstr "&Комментарии..." -#: pysollib/tile/menubar.py:421 pysollib/tile/tkstats.py:646 -#: pysollib/tk/tkstats.py:642 +#: pysollib/tile/menubar.py:418 pysollib/tile/tkstats.py:644 +#: pysollib/tk/tkstats.py:640 msgid "&Statistics..." msgstr "&Статистика..." -#: pysollib/tile/menubar.py:422 +#: pysollib/tile/menubar.py:419 msgid "Log..." msgstr "Лог..." -#: pysollib/tile/menubar.py:424 pysollib/tk/menubar.py:427 +#: pysollib/tile/menubar.py:421 pysollib/tk/menubar.py:424 msgid "D&emo statistics" msgstr "Статистика демо" -#: pysollib/tile/menubar.py:426 pysollib/tk/menubar.py:431 +#: pysollib/tile/menubar.py:423 pysollib/tk/menubar.py:428 msgid "&Assist" msgstr "&Подсказка" -#: pysollib/tile/menubar.py:427 pysollib/tk/menubar.py:432 +#: pysollib/tile/menubar.py:424 pysollib/tk/menubar.py:429 msgid "&Hint" msgstr "Подсказать &ход" -#: pysollib/tile/menubar.py:428 pysollib/tk/menubar.py:433 +#: pysollib/tile/menubar.py:425 pysollib/tk/menubar.py:430 msgid "Highlight p&iles" msgstr "П&оказать группы" -#: pysollib/tile/menubar.py:429 pysollib/tk/menubar.py:434 +#: pysollib/tile/menubar.py:426 pysollib/tk/menubar.py:431 msgid "&Find card" msgstr "&Найти карту" -#: pysollib/tile/menubar.py:431 pysollib/tk/menubar.py:436 +#: pysollib/tile/menubar.py:428 pysollib/tk/menubar.py:433 msgid "&Demo" msgstr "&Демо" -#: pysollib/tile/menubar.py:432 pysollib/tk/menubar.py:437 +#: pysollib/tile/menubar.py:429 pysollib/tk/menubar.py:434 msgid "Demo (&all games)" msgstr "Демо (&все игры)" -#: pysollib/tile/menubar.py:434 pysollib/tile/menubar.py:436 -#: pysollib/tk/menubar.py:439 pysollib/tk/menubar.py:441 +#: pysollib/tile/menubar.py:431 pysollib/tile/menubar.py:433 +#: pysollib/tk/menubar.py:436 pysollib/tk/menubar.py:438 msgid "&Solver (experimental)" msgstr "" -#: pysollib/tile/menubar.py:438 pysollib/tk/menubar.py:443 +#: pysollib/tile/menubar.py:435 pysollib/tk/menubar.py:440 msgid "&Piles description" msgstr "Описания &ячеек" -#: pysollib/tile/menubar.py:442 pysollib/tk/menubar.py:447 +#: pysollib/tile/menubar.py:439 pysollib/tk/menubar.py:444 msgid "&Options" msgstr "&Настройка" -#: pysollib/tile/menubar.py:443 pysollib/tk/menubar.py:448 +#: pysollib/tile/menubar.py:440 pysollib/tk/menubar.py:445 msgid "&Player options..." msgstr "Настройки &игрока..." -#: pysollib/tile/menubar.py:444 pysollib/tk/menubar.py:449 +#: pysollib/tile/menubar.py:441 pysollib/tk/menubar.py:446 msgid "&Automatic play" msgstr "Настройки &автоматической игры" -#: pysollib/tile/menubar.py:445 pysollib/tk/menubar.py:450 +#: pysollib/tile/menubar.py:442 pysollib/tk/menubar.py:447 msgid "Auto &face up" msgstr "Автоматически &переворачивать" -#: pysollib/tile/menubar.py:446 pysollib/tk/menubar.py:451 +#: pysollib/tile/menubar.py:443 pysollib/tk/menubar.py:448 msgid "A&uto drop" msgstr "А&втоматически сбрасывать карты" -#: pysollib/tile/menubar.py:447 pysollib/tk/menubar.py:452 +#: pysollib/tile/menubar.py:444 pysollib/tk/menubar.py:449 msgid "Auto &deal" msgstr "Автоматически &сдавать карты" -#: pysollib/tile/menubar.py:449 pysollib/tk/menubar.py:454 +#: pysollib/tile/menubar.py:446 pysollib/tk/menubar.py:451 msgid "&Quick play" msgstr "&Быстрая игра" -#: pysollib/tile/menubar.py:450 pysollib/tk/menubar.py:455 +#: pysollib/tile/menubar.py:447 pysollib/tk/menubar.py:452 msgid "Assist &level" msgstr "&Уровень подсказки" -#: pysollib/tile/menubar.py:451 pysollib/tk/menubar.py:456 +#: pysollib/tile/menubar.py:448 pysollib/tk/menubar.py:453 msgid "Enable &undo" msgstr "Разрешить &возврат хода" -#: pysollib/tile/menubar.py:452 pysollib/tk/menubar.py:457 +#: pysollib/tile/menubar.py:449 pysollib/tk/menubar.py:454 msgid "Enable &bookmarks" msgstr "Разрешить &закладки" -#: pysollib/tile/menubar.py:453 pysollib/tk/menubar.py:458 +#: pysollib/tile/menubar.py:450 pysollib/tk/menubar.py:455 msgid "Enable &hint" msgstr "Разрешить &подсказки" -#: pysollib/tile/menubar.py:454 pysollib/tk/menubar.py:459 +#: pysollib/tile/menubar.py:451 pysollib/tk/menubar.py:456 msgid "Enable highlight p&iles" msgstr "Разрешить показывать к&учи" -#: pysollib/tile/menubar.py:455 pysollib/tk/menubar.py:460 +#: pysollib/tile/menubar.py:452 pysollib/tk/menubar.py:457 msgid "Enable highlight &cards" msgstr "Разрешить показывать &карты" -#: pysollib/tile/menubar.py:456 pysollib/tk/menubar.py:461 +#: pysollib/tile/menubar.py:453 pysollib/tk/menubar.py:458 msgid "Enable highlight same &rank" msgstr "Разрешить показывать карты &одного достоинства" -#: pysollib/tile/menubar.py:457 pysollib/tk/menubar.py:462 +#: pysollib/tile/menubar.py:454 pysollib/tk/menubar.py:459 msgid "Highlight &no matching" msgstr "Подсветка отсутствия &совпадения" -#: pysollib/tile/menubar.py:459 pysollib/tk/menubar.py:464 +#: pysollib/tile/menubar.py:456 pysollib/tk/menubar.py:461 msgid "&Show removed tiles (in Mahjongg games)" msgstr "Показывать удалённые (в Маджонг)" -#: pysollib/tile/menubar.py:460 pysollib/tk/menubar.py:465 +#: pysollib/tile/menubar.py:457 pysollib/tk/menubar.py:462 msgid "Show hint &arrow (in Shisen-Sho games)" msgstr "Показывать стрелку (в Шисен-Сё)" -#: pysollib/tile/menubar.py:462 pysollib/tk/menubar.py:467 +#: pysollib/tile/menubar.py:459 pysollib/tk/menubar.py:464 msgid "&Sound..." msgstr "&Звук..." -#: pysollib/tile/menubar.py:470 pysollib/tk/menubar.py:475 +#: pysollib/tile/menubar.py:467 pysollib/tk/menubar.py:472 msgid "Cards&et..." msgstr "Коло&да..." -#: pysollib/tile/menubar.py:471 pysollib/tk/menubar.py:476 +#: pysollib/tile/menubar.py:468 pysollib/tk/menubar.py:473 msgid "Table t&ile..." msgstr "Игровой &стол..." -#: pysollib/tile/menubar.py:473 pysollib/tk/menubar.py:478 +#: pysollib/tile/menubar.py:470 pysollib/tk/menubar.py:475 msgid "Card &background" msgstr "&Рубашка карты" -#: pysollib/tile/menubar.py:474 pysollib/tk/menubar.py:479 +#: pysollib/tile/menubar.py:471 pysollib/tk/menubar.py:476 msgid "Card &view" msgstr "&Вид карты" -#: pysollib/tile/menubar.py:475 pysollib/tk/menubar.py:480 +#: pysollib/tile/menubar.py:472 pysollib/tk/menubar.py:477 msgid "Card shado&w" msgstr "Тень карты" -#: pysollib/tile/menubar.py:476 pysollib/tk/menubar.py:481 +#: pysollib/tile/menubar.py:473 pysollib/tk/menubar.py:478 msgid "Shade &legal moves" msgstr "Подсвечивать &разрешённые ходы" -#: pysollib/tile/menubar.py:477 pysollib/tk/menubar.py:482 +#: pysollib/tile/menubar.py:474 pysollib/tk/menubar.py:479 msgid "&Negative cards bottom" msgstr "&Негативные контуры карты" -#: pysollib/tile/menubar.py:478 pysollib/tk/menubar.py:483 +#: pysollib/tile/menubar.py:475 pysollib/tk/menubar.py:480 msgid "Shrink face-down cards" msgstr "Сжимать закрытые карты" -#: pysollib/tile/menubar.py:479 pysollib/tk/menubar.py:484 +#: pysollib/tile/menubar.py:476 pysollib/tk/menubar.py:481 msgid "Shade &filled stacks" msgstr "Затемнять заполненные ячейки" -#: pysollib/tile/menubar.py:480 pysollib/tk/menubar.py:485 +#: pysollib/tile/menubar.py:477 pysollib/tk/menubar.py:482 msgid "A&nimations" msgstr "Анимаци&я" -#: pysollib/tile/menubar.py:481 pysollib/tk/menubar.py:486 +#: pysollib/tile/menubar.py:478 pysollib/tk/menubar.py:483 msgid "&None" msgstr "&Нет" -#: pysollib/tile/menubar.py:482 pysollib/tk/menubar.py:487 +#: pysollib/tile/menubar.py:479 pysollib/tk/menubar.py:484 msgid "&Very fast" msgstr "&Очень быстрая" -#: pysollib/tile/menubar.py:483 pysollib/tk/menubar.py:488 +#: pysollib/tile/menubar.py:480 pysollib/tk/menubar.py:485 msgid "&Fast" msgstr "&Быстрая" -#: pysollib/tile/menubar.py:484 pysollib/tk/menubar.py:489 +#: pysollib/tile/menubar.py:481 pysollib/tk/menubar.py:486 msgid "&Medium" msgstr "С&редняя" -#: pysollib/tile/menubar.py:485 pysollib/tk/menubar.py:490 +#: pysollib/tile/menubar.py:482 pysollib/tk/menubar.py:487 msgid "&Slow" msgstr "&Медленная" -#: pysollib/tile/menubar.py:486 pysollib/tk/menubar.py:491 +#: pysollib/tile/menubar.py:483 pysollib/tk/menubar.py:488 msgid "V&ery slow" msgstr "&Очень медленная" -#: pysollib/tile/menubar.py:488 pysollib/tk/menubar.py:493 +#: pysollib/tile/menubar.py:485 pysollib/tk/menubar.py:490 msgid "&Redeal animation" msgstr "Анимация пере&сдачи" -#: pysollib/tile/menubar.py:490 pysollib/tk/menubar.py:495 +#: pysollib/tile/menubar.py:487 pysollib/tk/menubar.py:492 msgid "&Winning animation" msgstr "Анимация &победы" -#: pysollib/tile/menubar.py:491 pysollib/tk/menubar.py:496 +#: pysollib/tile/menubar.py:488 pysollib/tk/menubar.py:493 msgid "&Mouse" msgstr "&Мышь" -#: pysollib/tile/menubar.py:492 pysollib/tk/menubar.py:497 +#: pysollib/tile/menubar.py:489 pysollib/tk/menubar.py:494 msgid "&Drag-and-Drop" msgstr "" -#: pysollib/tile/menubar.py:493 pysollib/tk/menubar.py:498 +#: pysollib/tile/menubar.py:490 pysollib/tk/menubar.py:495 msgid "&Point-and-Click" msgstr "" -#: pysollib/tile/menubar.py:494 pysollib/tk/menubar.py:499 +#: pysollib/tile/menubar.py:491 pysollib/tk/menubar.py:496 msgid "&Sticky mouse" msgstr "&Липкая мышь" -#: pysollib/tile/menubar.py:496 pysollib/tk/menubar.py:501 +#: pysollib/tile/menubar.py:493 pysollib/tk/menubar.py:498 msgid "Use mouse for undo/redo" msgstr "Использовать мышь для отмены/повтора" -#: pysollib/tile/menubar.py:498 pysollib/tk/menubar.py:503 +#: pysollib/tile/menubar.py:495 pysollib/tk/menubar.py:500 msgid "&Fonts..." msgstr "&Шрифты..." -#: pysollib/tile/menubar.py:499 pysollib/tk/menubar.py:504 +#: pysollib/tile/menubar.py:496 pysollib/tk/menubar.py:501 msgid "&Colors..." msgstr "&Цвета..." -#: pysollib/tile/menubar.py:500 pysollib/tk/menubar.py:505 +#: pysollib/tile/menubar.py:497 pysollib/tk/menubar.py:502 msgid "Time&outs..." msgstr "Тайма&уты..." -#: pysollib/tile/menubar.py:503 pysollib/tk/menubar.py:507 +#: pysollib/tile/menubar.py:500 pysollib/tk/menubar.py:504 msgid "&Toolbar" msgstr "Панель и&нструментов" -#: pysollib/tile/menubar.py:505 pysollib/tk/menubar.py:509 +#: pysollib/tile/menubar.py:502 pysollib/tk/menubar.py:506 msgid "Stat&usbar" msgstr "Панель с&остояния" -#: pysollib/tile/menubar.py:506 pysollib/tk/menubar.py:510 +#: pysollib/tile/menubar.py:503 pysollib/tk/menubar.py:507 msgid "Show &statusbar" msgstr "Показывать панель состояния" -#: pysollib/tile/menubar.py:507 pysollib/tk/menubar.py:511 +#: pysollib/tile/menubar.py:504 pysollib/tk/menubar.py:508 msgid "Show &number of cards" msgstr "Показывать количество карт" -#: pysollib/tile/menubar.py:508 pysollib/tk/menubar.py:512 +#: pysollib/tile/menubar.py:505 pysollib/tk/menubar.py:509 msgid "Show &help bar" msgstr "Показывать панель помощи" -#: pysollib/tile/menubar.py:509 pysollib/tk/menubar.py:513 +#: pysollib/tile/menubar.py:506 pysollib/tk/menubar.py:510 msgid "Save games &geometry" msgstr "Сохранение &геометрии игры" -#: pysollib/tile/menubar.py:510 pysollib/tk/menubar.py:514 +#: pysollib/tile/menubar.py:507 pysollib/tk/menubar.py:511 msgid "&Demo logo" msgstr "Д&емо лого" -#: pysollib/tile/menubar.py:511 pysollib/tk/menubar.py:515 +#: pysollib/tile/menubar.py:508 pysollib/tk/menubar.py:512 msgid "Startup splash sc&reen" msgstr "О&кно запуска" -#: pysollib/tile/menubar.py:517 pysollib/tk/menubar.py:521 +#: pysollib/tile/menubar.py:514 pysollib/tk/menubar.py:518 msgid "&Help" msgstr "&Помощь" -#: pysollib/tile/menubar.py:518 pysollib/tk/menubar.py:522 +#: pysollib/tile/menubar.py:515 pysollib/tk/menubar.py:519 msgid "&Contents" msgstr "&Содержание" -#: pysollib/tile/menubar.py:519 pysollib/tk/menubar.py:523 +#: pysollib/tile/menubar.py:516 pysollib/tk/menubar.py:520 msgid "&How to play" msgstr "Как &играть" -#: pysollib/tile/menubar.py:520 pysollib/tk/menubar.py:524 +#: pysollib/tile/menubar.py:517 pysollib/tk/menubar.py:521 msgid "&Rules for this game" msgstr "&Правила текущей игры" -#: pysollib/tile/menubar.py:521 pysollib/tk/menubar.py:525 +#: pysollib/tile/menubar.py:518 pysollib/tk/menubar.py:522 msgid "&License terms" msgstr "&Лицензия" -#: pysollib/tile/menubar.py:638 pysollib/tk/menubar.py:642 +#: pysollib/tile/menubar.py:635 pysollib/tk/menubar.py:639 msgid "All &games..." msgstr "&Все игры..." -#: pysollib/tile/menubar.py:640 pysollib/tk/menubar.py:644 +#: pysollib/tile/menubar.py:637 pysollib/tk/menubar.py:641 msgid "Playable pre&view..." msgstr "Играемый &предпросмотр..." -#: pysollib/tile/menubar.py:693 pysollib/tk/menubar.py:697 +#: pysollib/tile/menubar.py:690 pysollib/tk/menubar.py:694 msgid "&Mahjongg games" msgstr "Игры маджонг" -#: pysollib/tile/menubar.py:731 pysollib/tk/menubar.py:735 +#: pysollib/tile/menubar.py:728 pysollib/tk/menubar.py:732 msgid "&Popular games" msgstr "&Популярные игры" -#: pysollib/tile/menubar.py:739 pysollib/tk/menubar.py:743 +#: pysollib/tile/menubar.py:736 pysollib/tk/menubar.py:740 msgid "&French games" msgstr "&Классические игры" -#: pysollib/tile/menubar.py:746 pysollib/tk/menubar.py:750 +#: pysollib/tile/menubar.py:743 pysollib/tk/menubar.py:747 msgid "&Oriental games" msgstr "&Восточные игры" -#: pysollib/tile/menubar.py:754 pysollib/tk/menubar.py:758 +#: pysollib/tile/menubar.py:751 pysollib/tk/menubar.py:755 msgid "&Special games" msgstr "&Особые игры" -#: pysollib/tile/menubar.py:760 pysollib/tk/menubar.py:764 +#: pysollib/tile/menubar.py:757 pysollib/tk/menubar.py:761 msgid "&Cusom games" msgstr "Самодельные игры" -#: pysollib/tile/menubar.py:766 pysollib/tk/menubar.py:770 +#: pysollib/tile/menubar.py:763 pysollib/tk/menubar.py:767 msgid "&All games by name" msgstr "&Все игры по имени" -#: pysollib/tile/menubar.py:1048 pysollib/tk/menubar.py:1052 +#: pysollib/tile/menubar.py:1045 pysollib/tk/menubar.py:1049 #: data/glade-translations:72 msgid "Sound settings" msgstr "Настройка звука" -#: pysollib/tile/menubar.py:1156 pysollib/tk/menubar.py:1164 +#: pysollib/tile/menubar.py:1153 pysollib/tk/menubar.py:1161 msgid "Select " msgstr "Выбрать " -#: pysollib/tile/menubar.py:1202 pysollib/tk/menubar.py:1211 +#: pysollib/tile/menubar.py:1199 pysollib/tk/menubar.py:1208 msgid "Select table background" msgstr "Выбрать фоновое изображение" -#: pysollib/tile/menubar.py:1347 +#: pysollib/tile/menubar.py:1344 msgid "Change theme" msgstr "Изменение темы" -#: pysollib/tile/menubar.py:1348 +#: pysollib/tile/menubar.py:1345 msgid "" "This settings will take effect\n" "the next time you restart " @@ -2748,42 +2745,41 @@ msgstr "" "Эта установка вступит в силу\n" "при следующем запуске " -#: pysollib/tile/menubar.py:1355 +#: pysollib/tile/menubar.py:1352 msgid "Set t&heme" msgstr "Установить &тему" -#: pysollib/tile/menubar.py:1361 +#: pysollib/tile/menubar.py:1358 #, fuzzy msgid "Default" msgstr "Сдача" -#: pysollib/tile/menubar.py:1362 +#: pysollib/tile/menubar.py:1359 #, fuzzy msgid "Classic" msgstr "Классический вид" -#: pysollib/tile/menubar.py:1363 +#: pysollib/tile/menubar.py:1360 msgid "Revitalized" msgstr "" -#: pysollib/tile/menubar.py:1364 +#: pysollib/tile/menubar.py:1361 msgid "Windows native" msgstr "" -#: pysollib/tile/menubar.py:1365 +#: pysollib/tile/menubar.py:1362 msgid "XP Native" msgstr "" -#: pysollib/tile/menubar.py:1366 +#: pysollib/tile/menubar.py:1363 msgid "Aqua" msgstr "" -#: pysollib/tile/menubar.py:1384 pysollib/tk/menubar.py:1369 +#: pysollib/tile/menubar.py:1381 pysollib/tk/menubar.py:1366 msgid "Solitaire Wizard" msgstr "" -#: pysollib/tile/menubar.py:1395 pysollib/tk/menubar.py:1380 -#, fuzzy +#: pysollib/tile/menubar.py:1392 pysollib/tk/menubar.py:1377 msgid "" "\n" "Error while saving game.\n" @@ -2870,12 +2866,12 @@ msgstr "Большие колоды" msgid "XLarge cardsets" msgstr "Очень большие колоды" -#: pysollib/tile/selectcardset.py:236 pysollib/tk/menubar.py:1161 +#: pysollib/tile/selectcardset.py:236 pysollib/tk/menubar.py:1158 msgid "&Info..." msgstr "&Информация..." -#: pysollib/tile/selectcardset.py:237 pysollib/tk/menubar.py:1159 -#: pysollib/tk/menubar.py:1161 pysollib/tk/selectcardset.py:241 +#: pysollib/tile/selectcardset.py:237 pysollib/tk/menubar.py:1156 +#: pysollib/tk/menubar.py:1158 pysollib/tk/selectcardset.py:241 msgid "&Load" msgstr "&Загрузить" @@ -2883,10 +2879,10 @@ msgstr "&Загрузить" msgid "About cardset" msgstr "О наборе карт" -#: pysollib/tile/selectcardset.py:327 pysollib/tile/selectgame.py:355 -#: pysollib/tk/selectcardset.py:336 pysollib/tk/selectgame.py:365 -#: pysollib/wizardutil.py:118 pysollib/wizardutil.py:155 -#: pysollib/wizardutil.py:220 pysollib/wizardutil.py:278 +#: pysollib/tile/selectcardset.py:327 pysollib/tile/selectgame.py:354 +#: pysollib/tk/selectcardset.py:336 pysollib/tk/selectgame.py:364 +#: pysollib/wizardutil.py:116 pysollib/wizardutil.py:153 +#: pysollib/wizardutil.py:218 pysollib/wizardutil.py:276 msgid "Type:" msgstr "Тип:" @@ -2902,278 +2898,278 @@ msgstr "Национальность:" msgid "Year:" msgstr "Год:" -#: pysollib/tile/selectgame.py:101 pysollib/tk/selectgame.py:100 +#: pysollib/tile/selectgame.py:100 pysollib/tk/selectgame.py:99 msgid "(no games)" msgstr "(нет игр)" -#: pysollib/tile/selectgame.py:122 pysollib/tk/selectgame.py:121 +#: pysollib/tile/selectgame.py:121 pysollib/tk/selectgame.py:120 msgid "Mahjongg Games" msgstr "Игры маджонг" -#: pysollib/tile/selectgame.py:125 pysollib/tk/selectgame.py:124 +#: pysollib/tile/selectgame.py:124 pysollib/tk/selectgame.py:123 msgid "French games" msgstr "Классические игры" -#: pysollib/tile/selectgame.py:127 pysollib/tk/selectgame.py:126 +#: pysollib/tile/selectgame.py:126 pysollib/tk/selectgame.py:125 msgid "Oriental Games" msgstr "Восточные игры" -#: pysollib/tile/selectgame.py:129 pysollib/tk/selectgame.py:128 +#: pysollib/tile/selectgame.py:128 pysollib/tk/selectgame.py:127 msgid "Special Games" msgstr "Особые игры" -#: pysollib/tile/selectgame.py:131 pysollib/tk/selectgame.py:130 +#: pysollib/tile/selectgame.py:130 pysollib/tk/selectgame.py:129 msgid "Original Games" msgstr "Оригинальные игры" -#: pysollib/tile/selectgame.py:145 pysollib/tk/selectgame.py:144 +#: pysollib/tile/selectgame.py:144 pysollib/tk/selectgame.py:143 msgid "by Compatibility" msgstr "По совместимости с другими программами" -#: pysollib/tile/selectgame.py:153 pysollib/tk/selectgame.py:152 +#: pysollib/tile/selectgame.py:152 pysollib/tk/selectgame.py:151 msgid "New games in v. " msgstr "Новые игры в версии " -#: pysollib/tile/selectgame.py:156 pysollib/tk/selectgame.py:155 +#: pysollib/tile/selectgame.py:155 pysollib/tk/selectgame.py:154 msgid "by PySol version" msgstr "По версии PySol" -#: pysollib/tile/selectgame.py:163 pysollib/tk/selectgame.py:162 +#: pysollib/tile/selectgame.py:162 pysollib/tk/selectgame.py:161 msgid "All Games" msgstr "Все игры" -#: pysollib/tile/selectgame.py:164 pysollib/tk/selectgame.py:163 +#: pysollib/tile/selectgame.py:163 pysollib/tk/selectgame.py:162 msgid "Alternate Names" msgstr "Другие имена" -#: pysollib/tile/selectgame.py:165 pysollib/tk/selectgame.py:164 +#: pysollib/tile/selectgame.py:164 pysollib/tk/selectgame.py:163 msgid "Popular Games" msgstr "Популярные игры" -#: pysollib/tile/selectgame.py:170 pysollib/tk/selectgame.py:169 +#: pysollib/tile/selectgame.py:169 pysollib/tk/selectgame.py:168 msgid "by Skill Level" msgstr "По уровню мастерства" -#: pysollib/tile/selectgame.py:171 pysollib/tile/selectgame.py:524 -#: pysollib/tk/selectgame.py:170 pysollib/tk/selectgame.py:533 -#: pysollib/wizardutil.py:80 +#: pysollib/tile/selectgame.py:170 pysollib/tile/selectgame.py:523 +#: pysollib/tk/selectgame.py:169 pysollib/tk/selectgame.py:532 +#: pysollib/wizardutil.py:78 msgid "Luck only" msgstr "Только на везение" -#: pysollib/tile/selectgame.py:172 pysollib/tile/selectgame.py:525 -#: pysollib/tk/selectgame.py:171 pysollib/tk/selectgame.py:534 -#: pysollib/wizardutil.py:81 +#: pysollib/tile/selectgame.py:171 pysollib/tile/selectgame.py:524 +#: pysollib/tk/selectgame.py:170 pysollib/tk/selectgame.py:533 +#: pysollib/wizardutil.py:79 msgid "Mostly luck" msgstr "В основном на везение" -#: pysollib/tile/selectgame.py:173 pysollib/tile/selectgame.py:526 -#: pysollib/tk/selectgame.py:172 pysollib/tk/selectgame.py:535 -#: pysollib/wizardutil.py:82 pysollib/wizardutil.py:86 +#: pysollib/tile/selectgame.py:172 pysollib/tile/selectgame.py:525 +#: pysollib/tk/selectgame.py:171 pysollib/tk/selectgame.py:534 +#: pysollib/wizardutil.py:80 pysollib/wizardutil.py:84 msgid "Balanced" msgstr "Сбалансированные" -#: pysollib/tile/selectgame.py:174 pysollib/tile/selectgame.py:527 -#: pysollib/tk/selectgame.py:173 pysollib/tk/selectgame.py:536 -#: pysollib/wizardutil.py:83 +#: pysollib/tile/selectgame.py:173 pysollib/tile/selectgame.py:526 +#: pysollib/tk/selectgame.py:172 pysollib/tk/selectgame.py:535 +#: pysollib/wizardutil.py:81 msgid "Mostly skill" msgstr "В основном на мастерство" -#: pysollib/tile/selectgame.py:175 pysollib/tile/selectgame.py:528 -#: pysollib/tk/selectgame.py:174 pysollib/tk/selectgame.py:537 -#: pysollib/wizardutil.py:84 +#: pysollib/tile/selectgame.py:174 pysollib/tile/selectgame.py:527 +#: pysollib/tk/selectgame.py:173 pysollib/tk/selectgame.py:536 +#: pysollib/wizardutil.py:82 msgid "Skill only" msgstr "Только на мастерство" -#: pysollib/tile/selectgame.py:177 pysollib/tk/selectgame.py:176 +#: pysollib/tile/selectgame.py:176 pysollib/tk/selectgame.py:175 msgid "by Game Feature" msgstr "По особенностям игры" -#: pysollib/tile/selectgame.py:178 pysollib/tk/selectgame.py:177 +#: pysollib/tile/selectgame.py:177 pysollib/tk/selectgame.py:176 msgid "by Number of Cards" msgstr "По количеству карт" -#: pysollib/tile/selectgame.py:179 pysollib/tk/selectgame.py:178 +#: pysollib/tile/selectgame.py:178 pysollib/tk/selectgame.py:177 msgid "32 cards" msgstr "32 карты" -#: pysollib/tile/selectgame.py:180 pysollib/tk/selectgame.py:179 +#: pysollib/tile/selectgame.py:179 pysollib/tk/selectgame.py:178 msgid "48 cards" msgstr "48 карт" -#: pysollib/tile/selectgame.py:181 pysollib/tk/selectgame.py:180 +#: pysollib/tile/selectgame.py:180 pysollib/tk/selectgame.py:179 msgid "52 cards" msgstr "52 карты" -#: pysollib/tile/selectgame.py:182 pysollib/tk/selectgame.py:181 +#: pysollib/tile/selectgame.py:181 pysollib/tk/selectgame.py:180 msgid "64 cards" msgstr "64 карты" -#: pysollib/tile/selectgame.py:183 pysollib/tk/selectgame.py:182 +#: pysollib/tile/selectgame.py:182 pysollib/tk/selectgame.py:181 msgid "78 cards" msgstr "78 карт" -#: pysollib/tile/selectgame.py:184 pysollib/tk/selectgame.py:183 +#: pysollib/tile/selectgame.py:183 pysollib/tk/selectgame.py:182 msgid "104 cards" msgstr "104 карты" -#: pysollib/tile/selectgame.py:185 pysollib/tk/selectgame.py:184 +#: pysollib/tile/selectgame.py:184 pysollib/tk/selectgame.py:183 msgid "144 cards" msgstr "144 карты" -#: pysollib/tile/selectgame.py:186 pysollib/tk/selectgame.py:185 +#: pysollib/tile/selectgame.py:185 pysollib/tk/selectgame.py:184 msgid "Other number" msgstr "Другое количество" -#: pysollib/tile/selectgame.py:188 pysollib/tk/selectgame.py:187 +#: pysollib/tile/selectgame.py:187 pysollib/tk/selectgame.py:186 msgid "by Number of Decks" msgstr "По количеству колод" -#: pysollib/tile/selectgame.py:189 pysollib/tk/selectgame.py:188 +#: pysollib/tile/selectgame.py:188 pysollib/tk/selectgame.py:187 msgid "1 deck games" msgstr "Игры с 1 колодой" -#: pysollib/tile/selectgame.py:190 pysollib/tk/selectgame.py:189 +#: pysollib/tile/selectgame.py:189 pysollib/tk/selectgame.py:188 msgid "2 deck games" msgstr "Игры с 2 колодами" -#: pysollib/tile/selectgame.py:191 pysollib/tk/selectgame.py:190 +#: pysollib/tile/selectgame.py:190 pysollib/tk/selectgame.py:189 msgid "3 deck games" msgstr "Игры с 3 колодами" -#: pysollib/tile/selectgame.py:192 pysollib/tk/selectgame.py:191 +#: pysollib/tile/selectgame.py:191 pysollib/tk/selectgame.py:190 msgid "4 deck games" msgstr "Игры с 4 колодами" -#: pysollib/tile/selectgame.py:194 pysollib/tk/selectgame.py:193 +#: pysollib/tile/selectgame.py:193 pysollib/tk/selectgame.py:192 msgid "by Number of Redeals" msgstr "По количеству пересдач" -#: pysollib/tile/selectgame.py:195 pysollib/tk/selectgame.py:194 +#: pysollib/tile/selectgame.py:194 pysollib/tk/selectgame.py:193 msgid "No redeal" msgstr "Без пересдачи" -#: pysollib/tile/selectgame.py:196 pysollib/tk/selectgame.py:195 +#: pysollib/tile/selectgame.py:195 pysollib/tk/selectgame.py:194 msgid "1 redeal" msgstr "1 пересдача" -#: pysollib/tile/selectgame.py:197 pysollib/tk/selectgame.py:196 +#: pysollib/tile/selectgame.py:196 pysollib/tk/selectgame.py:195 msgid "2 redeals" msgstr "2 пересдачи" -#: pysollib/tile/selectgame.py:198 pysollib/tk/selectgame.py:197 +#: pysollib/tile/selectgame.py:197 pysollib/tk/selectgame.py:196 msgid "3 redeals" msgstr "3 пересдачи" -#: pysollib/tile/selectgame.py:199 pysollib/tk/selectgame.py:198 -#: pysollib/wizardutil.py:126 +#: pysollib/tile/selectgame.py:198 pysollib/tk/selectgame.py:197 +#: pysollib/wizardutil.py:124 msgid "Unlimited redeals" msgstr "Неограниченное количество пересдач" -#: pysollib/tile/selectgame.py:201 pysollib/tk/selectgame.py:200 +#: pysollib/tile/selectgame.py:200 pysollib/tk/selectgame.py:199 msgid "Other number of redeals" msgstr "Другое количество пересдач" -#: pysollib/tile/selectgame.py:206 pysollib/tk/selectgame.py:205 +#: pysollib/tile/selectgame.py:205 pysollib/tk/selectgame.py:204 msgid "Other Categories" msgstr "Другие категории" -#: pysollib/tile/selectgame.py:207 pysollib/tk/selectgame.py:206 +#: pysollib/tile/selectgame.py:206 pysollib/tk/selectgame.py:205 msgid "Games for Children (very easy)" msgstr "Игры для детей (очень лёгкие)" -#: pysollib/tile/selectgame.py:208 pysollib/tk/selectgame.py:207 +#: pysollib/tile/selectgame.py:207 pysollib/tk/selectgame.py:206 msgid "Games with Scoring" msgstr "Игры со счётом" -#: pysollib/tile/selectgame.py:209 pysollib/tk/selectgame.py:208 +#: pysollib/tile/selectgame.py:208 pysollib/tk/selectgame.py:207 msgid "Games with Separate Decks" msgstr "Игры с раздельными колодами" -#: pysollib/tile/selectgame.py:210 pysollib/tk/selectgame.py:209 +#: pysollib/tile/selectgame.py:209 pysollib/tk/selectgame.py:208 msgid "Open Games (all cards visible)" msgstr "Открытые игры (все карты видны)" -#: pysollib/tile/selectgame.py:211 pysollib/tk/selectgame.py:210 +#: pysollib/tile/selectgame.py:210 pysollib/tk/selectgame.py:209 msgid "Relaxed Variants" msgstr "Облегчённые варианты" -#: pysollib/tile/selectgame.py:342 pysollib/tk/selectgame.py:349 +#: pysollib/tile/selectgame.py:341 pysollib/tk/selectgame.py:348 msgid "About game" msgstr "Об игре " -#: pysollib/tile/selectgame.py:352 pysollib/tk/selectgame.py:362 -#: pysollib/wizardutil.py:76 +#: pysollib/tile/selectgame.py:351 pysollib/tk/selectgame.py:361 +#: pysollib/wizardutil.py:74 msgid "Name:" msgstr "Имя:" -#: pysollib/tile/selectgame.py:353 pysollib/tk/selectgame.py:363 +#: pysollib/tile/selectgame.py:352 pysollib/tk/selectgame.py:362 msgid "Alternate names:" msgstr "Другие имена:" -#: pysollib/tile/selectgame.py:354 pysollib/tk/selectgame.py:364 +#: pysollib/tile/selectgame.py:353 pysollib/tk/selectgame.py:363 msgid "Category:" msgstr "Категория:" -#: pysollib/tile/selectgame.py:356 pysollib/tk/selectgame.py:366 -#: pysollib/wizardutil.py:87 +#: pysollib/tile/selectgame.py:355 pysollib/tk/selectgame.py:365 +#: pysollib/wizardutil.py:85 msgid "Skill level:" msgstr "Уровень мастерства:" -#: pysollib/tile/selectgame.py:357 pysollib/tk/selectgame.py:367 +#: pysollib/tile/selectgame.py:356 pysollib/tk/selectgame.py:366 msgid "Decks:" msgstr "Колод:" -#: pysollib/tile/selectgame.py:358 pysollib/tk/selectgame.py:368 +#: pysollib/tile/selectgame.py:357 pysollib/tk/selectgame.py:367 msgid "Redeals:" msgstr "Пересдач:" -#: pysollib/tile/selectgame.py:360 pysollib/tk/selectgame.py:370 +#: pysollib/tile/selectgame.py:359 pysollib/tk/selectgame.py:369 msgid "Played:" msgstr "Играл:" -#: pysollib/tile/selectgame.py:361 pysollib/tile/tkstats.py:205 -#: pysollib/tile/tkstats.py:257 pysollib/tk/selectgame.py:371 -#: pysollib/tk/tkstats.py:114 pysollib/tk/tkstats.py:166 +#: pysollib/tile/selectgame.py:360 pysollib/tile/tkstats.py:203 +#: pysollib/tile/tkstats.py:255 pysollib/tk/selectgame.py:370 +#: pysollib/tk/tkstats.py:112 pysollib/tk/tkstats.py:164 #: data/glade-translations:9 data/glade-translations:13 msgid "Won:" msgstr "Выиграл:" -#: pysollib/tile/selectgame.py:362 pysollib/tile/tkstats.py:206 -#: pysollib/tile/tkstats.py:259 pysollib/tk/selectgame.py:372 -#: pysollib/tk/tkstats.py:115 pysollib/tk/tkstats.py:167 +#: pysollib/tile/selectgame.py:361 pysollib/tile/tkstats.py:204 +#: pysollib/tile/tkstats.py:257 pysollib/tk/selectgame.py:371 +#: pysollib/tk/tkstats.py:113 pysollib/tk/tkstats.py:165 #: data/glade-translations:11 data/glade-translations:14 msgid "Lost:" msgstr "Проиграл:" -#: pysollib/tile/selectgame.py:363 pysollib/tile/tkstats.py:777 -#: pysollib/tk/selectgame.py:373 pysollib/tk/tkstats.py:741 +#: pysollib/tile/selectgame.py:362 pysollib/tile/tkstats.py:775 +#: pysollib/tk/selectgame.py:372 pysollib/tk/tkstats.py:739 #: data/glade-translations:18 msgid "Playing time:" msgstr "Игровое время:" -#: pysollib/tile/selectgame.py:364 pysollib/tile/tkstats.py:784 -#: pysollib/tk/selectgame.py:374 pysollib/tk/tkstats.py:748 +#: pysollib/tile/selectgame.py:363 pysollib/tile/tkstats.py:782 +#: pysollib/tk/selectgame.py:373 pysollib/tk/tkstats.py:746 #: data/glade-translations:19 msgid "Moves:" msgstr "Ходов:" -#: pysollib/tile/selectgame.py:365 pysollib/tk/selectgame.py:375 +#: pysollib/tile/selectgame.py:364 pysollib/tk/selectgame.py:374 msgid "% won:" msgstr "% побед:" -#: pysollib/tile/selectgame.py:397 pysollib/tk/selectgame.py:407 +#: pysollib/tile/selectgame.py:396 pysollib/tk/selectgame.py:406 msgid "&Rules" msgstr "&Правила" -#: pysollib/tile/selectgame.py:477 pysollib/tk/selectgame.py:486 +#: pysollib/tile/selectgame.py:476 pysollib/tk/selectgame.py:485 msgid "Playable Preview - " msgstr "Играемый предпросмотр - " -#: pysollib/tile/selectgame.py:531 pysollib/tk/selectgame.py:540 +#: pysollib/tile/selectgame.py:530 pysollib/tk/selectgame.py:539 msgid "variable" msgstr "переменное кол-во" -#: pysollib/tile/selectgame.py:532 pysollib/tk/selectgame.py:541 +#: pysollib/tile/selectgame.py:531 pysollib/tk/selectgame.py:540 msgid "unlimited" msgstr "неограниченное кол-во" @@ -3209,68 +3205,68 @@ msgstr "М&онотонный цвет..." msgid "Select table color" msgstr "Выбрать цвет" -#: pysollib/tile/solverdialog.py:79 pysollib/tk/solverdialog.py:78 +#: pysollib/tile/solverdialog.py:77 pysollib/tk/solverdialog.py:76 #: data/glade-translations:8 data/glade-translations:28 msgid "Game:" msgstr "Игра:" -#: pysollib/tile/solverdialog.py:98 pysollib/tk/solverdialog.py:101 +#: pysollib/tile/solverdialog.py:96 pysollib/tk/solverdialog.py:99 msgid "Solving method:" msgstr "Метод решения:" -#: pysollib/tile/solverdialog.py:115 pysollib/tk/solverdialog.py:118 +#: pysollib/tile/solverdialog.py:113 pysollib/tk/solverdialog.py:116 msgid "Preset:" msgstr "" -#: pysollib/tile/solverdialog.py:139 pysollib/tk/solverdialog.py:142 +#: pysollib/tile/solverdialog.py:137 pysollib/tk/solverdialog.py:140 msgid "Max iterations:" msgstr "Максимум итераций:" -#: pysollib/tile/solverdialog.py:149 pysollib/tk/solverdialog.py:152 +#: pysollib/tile/solverdialog.py:147 pysollib/tk/solverdialog.py:150 msgid "Max depth:" msgstr "Максимальная глубина:" -#: pysollib/tile/solverdialog.py:160 pysollib/tk/solverdialog.py:163 +#: pysollib/tile/solverdialog.py:158 pysollib/tk/solverdialog.py:161 msgid "Show progress" msgstr "Показывать прогресс" -#: pysollib/tile/solverdialog.py:164 pysollib/tk/solverdialog.py:167 +#: pysollib/tile/solverdialog.py:162 pysollib/tk/solverdialog.py:165 msgid "Progress" msgstr "Прогресс" -#: pysollib/tile/solverdialog.py:171 pysollib/tk/solverdialog.py:174 +#: pysollib/tile/solverdialog.py:169 pysollib/tk/solverdialog.py:172 msgid "Iteration:" msgstr "Итераций:" -#: pysollib/tile/solverdialog.py:177 pysollib/tk/solverdialog.py:180 +#: pysollib/tile/solverdialog.py:175 pysollib/tk/solverdialog.py:178 msgid "Depth:" msgstr "Глубина:" -#: pysollib/tile/solverdialog.py:183 pysollib/tk/solverdialog.py:186 +#: pysollib/tile/solverdialog.py:181 pysollib/tk/solverdialog.py:184 msgid "Stored-States:" msgstr "Сохранённых состояний: " -#: pysollib/tile/solverdialog.py:206 pysollib/tk/solverdialog.py:209 +#: pysollib/tile/solverdialog.py:204 pysollib/tk/solverdialog.py:207 msgid "&Close" msgstr "&Закрыть" -#: pysollib/tile/solverdialog.py:206 pysollib/tk/solverdialog.py:209 +#: pysollib/tile/solverdialog.py:204 pysollib/tk/solverdialog.py:207 msgid "&New" msgstr "&Новая" -#: pysollib/tile/solverdialog.py:206 pysollib/tk/solverdialog.py:209 +#: pysollib/tile/solverdialog.py:204 pysollib/tk/solverdialog.py:207 msgid "&Play" msgstr "&Играть" -#: pysollib/tile/solverdialog.py:206 pysollib/tk/solverdialog.py:209 +#: pysollib/tile/solverdialog.py:204 pysollib/tk/solverdialog.py:207 msgid "&Start" msgstr "Н&ачать" -#: pysollib/tile/solverdialog.py:276 pysollib/tk/solverdialog.py:279 +#: pysollib/tile/solverdialog.py:274 pysollib/tk/solverdialog.py:277 msgid "This game is solveable in %s moves." msgstr "Игра может быть решена за %s ходов." -#: pysollib/tile/solverdialog.py:279 pysollib/tk/solverdialog.py:282 +#: pysollib/tile/solverdialog.py:277 pysollib/tk/solverdialog.py:280 msgid "I could not solve this game." msgstr "Не смог решить игру." @@ -3322,13 +3318,13 @@ msgstr "Перемещение" msgid "No move" msgstr "Отмена перемещения" -#: pysollib/tile/soundoptionsdialog.py:94 pysollib/tile/toolbar.py:195 -#: pysollib/tk/soundoptionsdialog.py:92 pysollib/tk/toolbar.py:198 +#: pysollib/tile/soundoptionsdialog.py:94 pysollib/tile/toolbar.py:192 +#: pysollib/tk/soundoptionsdialog.py:92 pysollib/tk/toolbar.py:195 msgid "Undo" msgstr "Отмена" -#: pysollib/tile/soundoptionsdialog.py:95 pysollib/tile/toolbar.py:196 -#: pysollib/tk/soundoptionsdialog.py:93 pysollib/tk/toolbar.py:199 +#: pysollib/tile/soundoptionsdialog.py:95 pysollib/tile/toolbar.py:193 +#: pysollib/tk/soundoptionsdialog.py:93 pysollib/tk/toolbar.py:196 msgid "Redo" msgstr "Повтор" @@ -3426,19 +3422,19 @@ msgstr "Подсветка карты:" msgid "Highlight same rank:" msgstr "Подсветка одинаковых карт:" -#: pysollib/tile/tkconst.py:109 pysollib/tk/tkconst.py:107 +#: pysollib/tile/tkconst.py:106 pysollib/tk/tkconst.py:104 msgid "Icons only" msgstr "Только пиктограммы" -#: pysollib/tile/tkconst.py:110 pysollib/tk/tkconst.py:108 +#: pysollib/tile/tkconst.py:107 pysollib/tk/tkconst.py:105 msgid "Text below icons" msgstr "Текст под пиктограммами" -#: pysollib/tile/tkconst.py:111 pysollib/tk/tkconst.py:109 +#: pysollib/tile/tkconst.py:108 pysollib/tk/tkconst.py:106 msgid "Text beside icons" msgstr "Текст рядом с пиктограммами" -#: pysollib/tile/tkconst.py:112 pysollib/tk/tkconst.py:110 +#: pysollib/tile/tkconst.py:109 pysollib/tk/tkconst.py:107 msgid "Text only" msgstr "Только текст" @@ -3479,76 +3475,76 @@ msgstr "" msgid "Unable to service request:\n" msgstr "Невозможно выполнить запрос:\n" -#: pysollib/tile/tkstats.py:95 pysollib/tile/tkstats.py:741 -#: pysollib/tile/tkstats.py:883 pysollib/tk/tkstats.py:910 +#: pysollib/tile/tkstats.py:93 pysollib/tile/tkstats.py:739 +#: pysollib/tile/tkstats.py:881 pysollib/tk/tkstats.py:908 #: data/glade-translations:17 msgid "Current game" msgstr "Текущая игра" -#: pysollib/tile/tkstats.py:99 pysollib/tile/tkstats.py:749 -#: pysollib/tile/tkstats.py:878 pysollib/tk/tkstats.py:904 +#: pysollib/tile/tkstats.py:97 pysollib/tile/tkstats.py:747 +#: pysollib/tile/tkstats.py:876 pysollib/tk/tkstats.py:902 #: data/glade-translations:30 msgid "All games" msgstr "Все игры" -#: pysollib/tile/tkstats.py:109 +#: pysollib/tile/tkstats.py:107 msgid "Progression" msgstr "Прогресс" -#: pysollib/tile/tkstats.py:124 +#: pysollib/tile/tkstats.py:122 msgid "&Play this game" msgstr "&Выбрать игру" -#: pysollib/tile/tkstats.py:126 pysollib/tk/tkstats.py:294 +#: pysollib/tile/tkstats.py:124 pysollib/tk/tkstats.py:292 msgid "&Reset..." msgstr "О&чистить..." -#: pysollib/tile/tkstats.py:186 pysollib/tk/tkstats.py:81 +#: pysollib/tile/tkstats.py:184 pysollib/tk/tkstats.py:79 msgid "Demo games" msgstr "Демо игры" -#: pysollib/tile/tkstats.py:191 pysollib/tk/tkstats.py:98 +#: pysollib/tile/tkstats.py:189 pysollib/tk/tkstats.py:96 #: data/glade-translations:16 msgid "Total" msgstr "Всего" -#: pysollib/tile/tkstats.py:193 pysollib/tk/tkstats.py:100 +#: pysollib/tile/tkstats.py:191 pysollib/tk/tkstats.py:98 #: data/glade-translations:12 msgid "Current session" msgstr "Текущая сессия" -#: pysollib/tile/tkstats.py:207 pysollib/tile/tkstats.py:261 -#: pysollib/tk/tkstats.py:116 pysollib/tk/tkstats.py:168 +#: pysollib/tile/tkstats.py:205 pysollib/tile/tkstats.py:259 +#: pysollib/tk/tkstats.py:114 pysollib/tk/tkstats.py:166 #: data/glade-translations:10 data/glade-translations:15 msgid "Total:" msgstr "Всего:" -#: pysollib/tile/tkstats.py:314 pysollib/tk/tkstats.py:281 +#: pysollib/tile/tkstats.py:312 pysollib/tk/tkstats.py:279 msgid "No games" msgstr "Нет игр" -#: pysollib/tile/tkstats.py:516 +#: pysollib/tile/tkstats.py:514 msgid "Log" msgstr "Лог" -#: pysollib/tile/tkstats.py:547 pysollib/tk/tkstats.py:518 -#: pysollib/tk/tkstats.py:584 pysollib/tk/tkstats.py:599 +#: pysollib/tile/tkstats.py:545 pysollib/tk/tkstats.py:516 +#: pysollib/tk/tkstats.py:582 pysollib/tk/tkstats.py:597 msgid "&Save to file" msgstr "&Сохранить в файл" -#: pysollib/tile/tkstats.py:617 pysollib/tk/tkstats.py:614 +#: pysollib/tile/tkstats.py:615 pysollib/tk/tkstats.py:612 msgid "Highlight piles: " msgstr "Подсветка групп: " -#: pysollib/tile/tkstats.py:618 pysollib/tk/tkstats.py:615 +#: pysollib/tile/tkstats.py:616 pysollib/tk/tkstats.py:613 msgid "Highlight cards: " msgstr "Подсветка карт: " -#: pysollib/tile/tkstats.py:619 pysollib/tk/tkstats.py:616 +#: pysollib/tile/tkstats.py:617 pysollib/tk/tkstats.py:614 msgid "Highlight same rank: " msgstr "Подсветка карт одного достоинства: " -#: pysollib/tile/tkstats.py:622 pysollib/tk/tkstats.py:619 +#: pysollib/tile/tkstats.py:620 pysollib/tk/tkstats.py:617 msgid "" "\n" "Redeals: " @@ -3556,7 +3552,7 @@ msgstr "" "\n" "Раздач: " -#: pysollib/tile/tkstats.py:623 pysollib/tk/tkstats.py:620 +#: pysollib/tile/tkstats.py:621 pysollib/tk/tkstats.py:618 msgid "" "\n" "Cards in Talon: " @@ -3564,7 +3560,7 @@ msgstr "" "\n" "Карт в колоде: " -#: pysollib/tile/tkstats.py:625 pysollib/tk/tkstats.py:622 +#: pysollib/tile/tkstats.py:623 pysollib/tk/tkstats.py:620 msgid "" "\n" "Cards in Waste: " @@ -3572,128 +3568,130 @@ msgstr "" "\n" "Карт в сбросе: " -#: pysollib/tile/tkstats.py:627 pysollib/tk/tkstats.py:624 +#: pysollib/tile/tkstats.py:625 pysollib/tk/tkstats.py:622 msgid "" "\n" "Cards in Foundations: " -msgstr "\nКарт на базовых ячейках: " +msgstr "" +"\n" +"Карт на базовых ячейках: " -#: pysollib/tile/tkstats.py:631 pysollib/tk/tkstats.py:627 +#: pysollib/tile/tkstats.py:629 pysollib/tk/tkstats.py:625 msgid "Game status" msgstr "Статус игры" -#: pysollib/tile/tkstats.py:634 pysollib/tk/tkstats.py:630 +#: pysollib/tile/tkstats.py:632 pysollib/tk/tkstats.py:628 msgid "Playing time: " msgstr "Игровое время: " -#: pysollib/tile/tkstats.py:635 pysollib/tk/tkstats.py:631 +#: pysollib/tile/tkstats.py:633 pysollib/tk/tkstats.py:629 msgid "Started at: " msgstr "Игра начата: " -#: pysollib/tile/tkstats.py:636 pysollib/tk/tkstats.py:632 +#: pysollib/tile/tkstats.py:634 pysollib/tk/tkstats.py:630 msgid "Moves: " msgstr "Ходов: " -#: pysollib/tile/tkstats.py:637 pysollib/tk/tkstats.py:633 +#: pysollib/tile/tkstats.py:635 pysollib/tk/tkstats.py:631 msgid "Undo moves: " msgstr "Отменено ходов: " -#: pysollib/tile/tkstats.py:638 pysollib/tk/tkstats.py:634 +#: pysollib/tile/tkstats.py:636 pysollib/tk/tkstats.py:632 msgid "Bookmark moves: " msgstr "Ходов по закладкам: " -#: pysollib/tile/tkstats.py:639 pysollib/tk/tkstats.py:635 +#: pysollib/tile/tkstats.py:637 pysollib/tk/tkstats.py:633 msgid "Demo moves: " msgstr "Демо ходов: " -#: pysollib/tile/tkstats.py:640 pysollib/tk/tkstats.py:636 +#: pysollib/tile/tkstats.py:638 pysollib/tk/tkstats.py:634 msgid "Total player moves: " msgstr "Всего ходов игрока:" -#: pysollib/tile/tkstats.py:641 pysollib/tk/tkstats.py:637 +#: pysollib/tile/tkstats.py:639 pysollib/tk/tkstats.py:635 msgid "Total moves in this game: " msgstr "Всего ходов в этой игре: " -#: pysollib/tile/tkstats.py:642 pysollib/tk/tkstats.py:638 +#: pysollib/tile/tkstats.py:640 pysollib/tk/tkstats.py:636 msgid "Hints: " msgstr "Подсказок: " -#: pysollib/tile/tkstats.py:671 pysollib/tk/tkstats.py:668 +#: pysollib/tile/tkstats.py:669 pysollib/tk/tkstats.py:666 msgid "N" msgstr "N" -#: pysollib/tile/tkstats.py:684 pysollib/tk/tkstats.py:677 +#: pysollib/tile/tkstats.py:682 pysollib/tk/tkstats.py:675 msgid "Result" msgstr "Результат" -#: pysollib/tile/tkstats.py:746 pysollib/tk/tkstats.py:786 +#: pysollib/tile/tkstats.py:744 pysollib/tk/tkstats.py:784 msgid "No TOP for this game" msgstr "TOP для текущей игры отсутствует" -#: pysollib/tile/tkstats.py:754 +#: pysollib/tile/tkstats.py:752 msgid "No TOP for all games" msgstr "TOP для всех игр отсутствует" -#: pysollib/tile/tkstats.py:765 pysollib/tk/tkstats.py:733 +#: pysollib/tile/tkstats.py:763 pysollib/tk/tkstats.py:731 #: data/glade-translations:21 msgid "Minimum" msgstr "Минимум" -#: pysollib/tile/tkstats.py:767 pysollib/tk/tkstats.py:734 +#: pysollib/tile/tkstats.py:765 pysollib/tk/tkstats.py:732 #: data/glade-translations:22 msgid "Maximum" msgstr "Максимум" -#: pysollib/tile/tkstats.py:769 pysollib/tk/tkstats.py:735 +#: pysollib/tile/tkstats.py:767 pysollib/tk/tkstats.py:733 #: data/glade-translations:23 msgid "Average" msgstr "Среднее" -#: pysollib/tile/tkstats.py:791 pysollib/tk/tkstats.py:755 +#: pysollib/tile/tkstats.py:789 pysollib/tk/tkstats.py:753 #: data/glade-translations:20 msgid "Total moves:" msgstr "Всего ходов:" -#: pysollib/tile/tkstats.py:888 pysollib/tk/tkstats.py:917 +#: pysollib/tile/tkstats.py:886 pysollib/tk/tkstats.py:915 msgid "Statistics for" msgstr "Статистика за" -#: pysollib/tile/tkstats.py:893 pysollib/tk/tkstats.py:924 +#: pysollib/tile/tkstats.py:891 pysollib/tk/tkstats.py:922 msgid "Last 7 days" msgstr "Последние 7 дней" -#: pysollib/tile/tkstats.py:894 pysollib/tk/tkstats.py:925 +#: pysollib/tile/tkstats.py:892 pysollib/tk/tkstats.py:923 msgid "Last month" msgstr "Последний месяц" -#: pysollib/tile/tkstats.py:895 pysollib/tk/tkstats.py:926 +#: pysollib/tile/tkstats.py:893 pysollib/tk/tkstats.py:924 msgid "Last year" msgstr "Последний год" -#: pysollib/tile/tkstats.py:896 pysollib/tk/tkstats.py:927 +#: pysollib/tile/tkstats.py:894 pysollib/tk/tkstats.py:925 msgid "All time" msgstr "Всё время" -#: pysollib/tile/tkstats.py:902 pysollib/tk/tkstats.py:935 +#: pysollib/tile/tkstats.py:900 pysollib/tk/tkstats.py:933 msgid "Show graphs" msgstr "Показывать графики" -#: pysollib/tile/tkstats.py:950 pysollib/tile/tkstats.py:966 -#: pysollib/tile/tkstats.py:1005 pysollib/tk/tkstats.py:858 -#: pysollib/tk/tkstats.py:874 pysollib/tk/tkstats.py:986 +#: pysollib/tile/tkstats.py:948 pysollib/tile/tkstats.py:964 +#: pysollib/tile/tkstats.py:1003 pysollib/tk/tkstats.py:856 +#: pysollib/tk/tkstats.py:872 pysollib/tk/tkstats.py:984 msgid "Games/day" msgstr "Игр за день" -#: pysollib/tile/tkstats.py:951 pysollib/tile/tkstats.py:1007 -#: pysollib/tk/tkstats.py:859 pysollib/tk/tkstats.py:988 +#: pysollib/tile/tkstats.py:949 pysollib/tile/tkstats.py:1005 +#: pysollib/tk/tkstats.py:857 pysollib/tk/tkstats.py:986 msgid "Games/week" msgstr "Игр за неделю" -#: pysollib/tile/toolbar.py:189 pysollib/tk/toolbar.py:192 +#: pysollib/tile/toolbar.py:186 pysollib/tk/toolbar.py:189 msgid "New" msgstr "Новая" -#: pysollib/tile/toolbar.py:190 pysollib/tk/toolbar.py:193 +#: pysollib/tile/toolbar.py:187 pysollib/tk/toolbar.py:190 msgid "" "Restart the\n" "current game" @@ -3701,11 +3699,11 @@ msgstr "" "Начать текущую игру\n" "с начала" -#: pysollib/tile/toolbar.py:192 pysollib/tk/toolbar.py:195 +#: pysollib/tile/toolbar.py:189 pysollib/tk/toolbar.py:192 msgid "Open" msgstr "Открыть" -#: pysollib/tile/toolbar.py:192 pysollib/tk/toolbar.py:195 +#: pysollib/tile/toolbar.py:189 pysollib/tk/toolbar.py:192 msgid "" "Open a\n" "saved game" @@ -3713,87 +3711,87 @@ msgstr "" "Открыть\n" "сохранённую игру" -#: pysollib/tile/toolbar.py:193 pysollib/tk/toolbar.py:196 +#: pysollib/tile/toolbar.py:190 pysollib/tk/toolbar.py:193 msgid "Save" msgstr "Сохранить" -#: pysollib/tile/toolbar.py:193 pysollib/tk/toolbar.py:196 +#: pysollib/tile/toolbar.py:190 pysollib/tk/toolbar.py:193 msgid "Save game" msgstr "Сохранить игру" -#: pysollib/tile/toolbar.py:195 pysollib/tk/toolbar.py:198 +#: pysollib/tile/toolbar.py:192 pysollib/tk/toolbar.py:195 msgid "Undo last move" msgstr "Отменить последний ход" -#: pysollib/tile/toolbar.py:196 pysollib/tk/toolbar.py:199 +#: pysollib/tile/toolbar.py:193 pysollib/tk/toolbar.py:196 msgid "Redo last move" msgstr "Вернуть ход" -#: pysollib/tile/toolbar.py:197 pysollib/tk/toolbar.py:200 +#: pysollib/tile/toolbar.py:194 pysollib/tk/toolbar.py:197 msgid "Auto drop cards" msgstr "Автоматически сбросить карты" -#: pysollib/tile/toolbar.py:197 pysollib/tk/toolbar.py:200 +#: pysollib/tile/toolbar.py:194 pysollib/tk/toolbar.py:197 msgid "Autodrop" msgstr "Сбросить" -#: pysollib/tile/toolbar.py:198 pysollib/tk/toolbar.py:201 +#: pysollib/tile/toolbar.py:195 pysollib/tk/toolbar.py:198 msgid "Pause" msgstr "Пауза" -#: pysollib/tile/toolbar.py:198 pysollib/tk/toolbar.py:201 +#: pysollib/tile/toolbar.py:195 pysollib/tk/toolbar.py:198 msgid "Pause game" msgstr "Приостановить игру" -#: pysollib/tile/toolbar.py:200 pysollib/tk/toolbar.py:203 +#: pysollib/tile/toolbar.py:197 pysollib/tk/toolbar.py:200 msgid "View statistics" msgstr "Посмотреть статистику" -#: pysollib/tile/toolbar.py:201 pysollib/tk/toolbar.py:204 +#: pysollib/tile/toolbar.py:198 pysollib/tk/toolbar.py:201 msgid "Rules" msgstr "Правила" -#: pysollib/tile/toolbar.py:201 pysollib/tk/toolbar.py:204 +#: pysollib/tile/toolbar.py:198 pysollib/tk/toolbar.py:201 msgid "Rules for this game" msgstr "Правила текущей игры" -#: pysollib/tile/toolbar.py:203 pysollib/tk/toolbar.py:206 +#: pysollib/tile/toolbar.py:200 pysollib/tk/toolbar.py:203 msgid "Quit" msgstr "Выйти" -#: pysollib/tile/toolbar.py:217 pysollib/tk/toolbar.py:220 +#: pysollib/tile/toolbar.py:214 pysollib/tk/toolbar.py:217 msgid "Player" msgstr "Игрок" -#: pysollib/tile/toolbar.py:218 pysollib/tk/toolbar.py:221 +#: pysollib/tile/toolbar.py:215 pysollib/tk/toolbar.py:218 msgid "Player options" msgstr "Установки игрока" -#: pysollib/tile/toolbar.py:399 pysollib/tk/toolbar.py:436 +#: pysollib/tile/toolbar.py:396 pysollib/tk/toolbar.py:433 msgid "Toolbar" msgstr "Панель инструментов" -#: pysollib/tk/menubar.py:418 +#: pysollib/tk/menubar.py:415 msgid "&Statistics" msgstr "Ст&атистика" -#: pysollib/tk/menubar.py:419 pysollib/tk/menubar.py:428 +#: pysollib/tk/menubar.py:416 pysollib/tk/menubar.py:425 msgid "Current game..." msgstr "Текущая игра..." -#: pysollib/tk/menubar.py:420 pysollib/tk/menubar.py:429 +#: pysollib/tk/menubar.py:417 pysollib/tk/menubar.py:426 msgid "All games..." msgstr "Все игры..." -#: pysollib/tk/menubar.py:422 +#: pysollib/tk/menubar.py:419 msgid "Session log..." msgstr "Лог сессии..." -#: pysollib/tk/menubar.py:423 +#: pysollib/tk/menubar.py:420 msgid "Full log..." msgstr "Полный лог..." -#: pysollib/tk/menubar.py:426 +#: pysollib/tk/menubar.py:423 msgid "Progression..." msgstr "Прогресс..." @@ -3809,19 +3807,19 @@ msgstr "Выбрать имя" msgid "Enable samles" msgstr "Включить звуки" -#: pysollib/tk/tkstats.py:292 +#: pysollib/tk/tkstats.py:290 msgid "&All games..." msgstr "&Все игры..." -#: pysollib/tk/tkstats.py:519 +#: pysollib/tk/tkstats.py:517 msgid "&Reset all..." msgstr "О&чистить все..." -#: pysollib/tk/tkstats.py:584 +#: pysollib/tk/tkstats.py:582 msgid "Session &log..." msgstr "&Лог сессии..." -#: pysollib/tk/tkstats.py:599 +#: pysollib/tk/tkstats.py:597 msgid "&Full log..." msgstr "&Полный лог..." @@ -3853,282 +3851,282 @@ msgstr "красный" msgid "cardset" msgstr "набор карт" -#: pysollib/wizardpresets.py:27 +#: pysollib/wizardpresets.py:25 pysollib/wizardutil.py:72 msgid "My Game" msgstr "Моя Игра" -#: pysollib/wizardpresets.py:32 +#: pysollib/wizardpresets.py:30 msgid "My Klondike" msgstr "Мой Клондайк" -#: pysollib/wizardpresets.py:46 +#: pysollib/wizardpresets.py:44 msgid "My FreeCell" msgstr "Моя Свободная Ячейка" -#: pysollib/wizardpresets.py:55 +#: pysollib/wizardpresets.py:53 msgid "My Spider" msgstr "Мой Паук" -#: pysollib/wizardpresets.py:72 +#: pysollib/wizardpresets.py:70 msgid "My Gypsy" msgstr "Мой Цыганский пасьянс" -#: pysollib/wizardpresets.py:85 +#: pysollib/wizardpresets.py:83 msgid "My Ground for a Divorce" msgstr "Мой Повод для разрыва" -#: pysollib/wizardpresets.py:102 +#: pysollib/wizardpresets.py:100 msgid "My Double Klondike" msgstr "Мой Двойной Клондайк" -#: pysollib/wizardpresets.py:117 +#: pysollib/wizardpresets.py:115 msgid "My Simple Simon" msgstr "Мой Простофиля Симон" -#: pysollib/wizardutil.py:69 +#: pysollib/wizardutil.py:67 msgid "Initial setting:" msgstr "Предварительные установки:" -#: pysollib/wizardutil.py:91 pysollib/wizardutil.py:95 +#: pysollib/wizardutil.py:89 pysollib/wizardutil.py:93 msgid "One" msgstr "Одна" -#: pysollib/wizardutil.py:92 +#: pysollib/wizardutil.py:90 msgid "Two" msgstr "Две" -#: pysollib/wizardutil.py:93 +#: pysollib/wizardutil.py:91 msgid "Three" msgstr "Три" -#: pysollib/wizardutil.py:94 +#: pysollib/wizardutil.py:92 msgid "Four" msgstr "Четыре" -#: pysollib/wizardutil.py:96 +#: pysollib/wizardutil.py:94 msgid "Number of decks:" msgstr "Количество колод:" -#: pysollib/wizardutil.py:106 +#: pysollib/wizardutil.py:104 msgid "Layout:" msgstr "Раскладка:" -#: pysollib/wizardutil.py:110 pysollib/wizardutil.py:117 -#: pysollib/wizardutil.py:347 +#: pysollib/wizardutil.py:108 pysollib/wizardutil.py:115 +#: pysollib/wizardutil.py:345 msgid "Initial dealing" msgstr "Начальная раздача" -#: pysollib/wizardutil.py:111 +#: pysollib/wizardutil.py:109 msgid "Deal to waste" msgstr "Сдавать на сброс" -#: pysollib/wizardutil.py:112 +#: pysollib/wizardutil.py:110 msgid "Deal to tableau" msgstr "Сдавать на игровой стол" -#: pysollib/wizardutil.py:113 +#: pysollib/wizardutil.py:111 msgid "Deal to reserves" msgstr "Сдавать на резервные ячейки" -#: pysollib/wizardutil.py:115 +#: pysollib/wizardutil.py:113 msgid "Ground for a Divorce" msgstr "" -#: pysollib/wizardutil.py:122 pysollib/wizardutil.py:128 +#: pysollib/wizardutil.py:120 pysollib/wizardutil.py:126 msgid "No redeals" msgstr "Без пересдачи" -#: pysollib/wizardutil.py:123 +#: pysollib/wizardutil.py:121 msgid "One redeal" msgstr "Одна пересдача" -#: pysollib/wizardutil.py:124 +#: pysollib/wizardutil.py:122 msgid "Two redeals" msgstr "Две пересдачи" -#: pysollib/wizardutil.py:125 +#: pysollib/wizardutil.py:123 msgid "Three redeals" msgstr "Три пересдачи" -#: pysollib/wizardutil.py:129 +#: pysollib/wizardutil.py:127 msgid "Number of redeals:" msgstr "Количество пересдач:" -#: pysollib/wizardutil.py:136 +#: pysollib/wizardutil.py:134 msgid "# of cards dealt to the waste:" msgstr "Кол-во карт сдающихся на сброс:" -#: pysollib/wizardutil.py:142 +#: pysollib/wizardutil.py:140 msgid "Shuffle during redeal:" msgstr "Тасовать при пересдачи:" -#: pysollib/wizardutil.py:147 pysollib/wizardutil.py:154 -#: pysollib/wizardutil.py:201 +#: pysollib/wizardutil.py:145 pysollib/wizardutil.py:152 +#: pysollib/wizardutil.py:199 msgid "Same suit" msgstr "В соответствии с мастью" -#: pysollib/wizardutil.py:148 pysollib/wizardutil.py:202 -#: pysollib/wizardutil.py:219 +#: pysollib/wizardutil.py:146 pysollib/wizardutil.py:200 +#: pysollib/wizardutil.py:217 msgid "Alternate color" msgstr "Чередуя цвет" -#: pysollib/wizardutil.py:149 pysollib/wizardutil.py:203 +#: pysollib/wizardutil.py:147 pysollib/wizardutil.py:201 msgid "Same color" msgstr "В соответствии с цветом" -#: pysollib/wizardutil.py:150 pysollib/wizardutil.py:204 +#: pysollib/wizardutil.py:148 pysollib/wizardutil.py:202 msgid "Rank" msgstr "В соответствии с достоинством" -#: pysollib/wizardutil.py:151 pysollib/wizardutil.py:212 +#: pysollib/wizardutil.py:149 pysollib/wizardutil.py:210 msgid "Spider same suit" msgstr "Паук в соответствии с мастью" -#: pysollib/wizardutil.py:152 pysollib/wizardutil.py:213 +#: pysollib/wizardutil.py:150 pysollib/wizardutil.py:211 msgid "Spider alternate color" msgstr "Паук чередуя цвет" -#: pysollib/wizardutil.py:161 pysollib/wizardutil.py:226 -#: pysollib/wizardutil.py:229 +#: pysollib/wizardutil.py:159 pysollib/wizardutil.py:224 +#: pysollib/wizardutil.py:227 msgid "Any" msgstr "Любая" -#: pysollib/wizardutil.py:164 pysollib/wizardutil.py:230 +#: pysollib/wizardutil.py:162 pysollib/wizardutil.py:228 msgid "Base card:" msgstr "Базовая карта:" -#: pysollib/wizardutil.py:168 pysollib/wizardutil.py:169 -#: pysollib/wizardutil.py:234 +#: pysollib/wizardutil.py:166 pysollib/wizardutil.py:167 +#: pysollib/wizardutil.py:232 msgid "Up" msgstr "Вверх" -#: pysollib/wizardutil.py:168 pysollib/wizardutil.py:234 -#: pysollib/wizardutil.py:235 +#: pysollib/wizardutil.py:166 pysollib/wizardutil.py:232 +#: pysollib/wizardutil.py:233 msgid "Down" msgstr "Вниз" -#: pysollib/wizardutil.py:170 pysollib/wizardutil.py:236 +#: pysollib/wizardutil.py:168 pysollib/wizardutil.py:234 msgid "Direction:" msgstr "Направление:" -#: pysollib/wizardutil.py:176 pysollib/wizardutil.py:248 +#: pysollib/wizardutil.py:174 pysollib/wizardutil.py:246 msgid "Wrapping:" msgstr "Оборачивание:" -#: pysollib/wizardutil.py:181 pysollib/wizardutil.py:182 -#: pysollib/wizardutil.py:240 +#: pysollib/wizardutil.py:179 pysollib/wizardutil.py:180 +#: pysollib/wizardutil.py:238 msgid "Top card" msgstr "Верхнюю карту" -#: pysollib/wizardutil.py:181 pysollib/wizardutil.py:227 +#: pysollib/wizardutil.py:179 pysollib/wizardutil.py:225 msgid "None" msgstr "Нет" -#: pysollib/wizardutil.py:183 pysollib/wizardutil.py:242 +#: pysollib/wizardutil.py:181 pysollib/wizardutil.py:240 msgid "Move:" msgstr "Перемещать:" -#: pysollib/wizardutil.py:189 -msgid "First card sets base rank:" -msgstr "Первая карта устанавливает базовое достоинство:" +#: pysollib/wizardutil.py:187 +msgid "First card sets base cards:" +msgstr "Первая карта устанавливает базовые карты:" -#: pysollib/wizardutil.py:197 +#: pysollib/wizardutil.py:195 msgid "Number of tableau piles:" msgstr "Количество ячеек на игровом столе:" -#: pysollib/wizardutil.py:205 +#: pysollib/wizardutil.py:203 msgid "Any suit but the same" msgstr "Любая масть кроме такой же" -#: pysollib/wizardutil.py:207 +#: pysollib/wizardutil.py:205 msgid "Up or down by same suit" msgstr "По возрастанию или убыванию в соответствии с мастью" -#: pysollib/wizardutil.py:208 +#: pysollib/wizardutil.py:206 msgid "Up or down by alternate color" msgstr "По возрастанию или убыванию чередуя цвет" -#: pysollib/wizardutil.py:209 +#: pysollib/wizardutil.py:207 msgid "Up or down by rank" msgstr "По возрастанию или убыванию в соответствии с достоинством" -#: pysollib/wizardutil.py:210 +#: pysollib/wizardutil.py:208 msgid "Up or down by same color" msgstr "По возрастанию или убыванию в соответствии с цветом" -#: pysollib/wizardutil.py:215 +#: pysollib/wizardutil.py:213 msgid "Yukon same suit" msgstr "Юкон в соответствии с мастью" -#: pysollib/wizardutil.py:216 +#: pysollib/wizardutil.py:214 msgid "Yukon alternate color" msgstr "Юкон чередуя цвет" -#: pysollib/wizardutil.py:217 +#: pysollib/wizardutil.py:215 msgid "Yukon rank" msgstr "Юкон в соответствии с достоинством" -#: pysollib/wizardutil.py:240 pysollib/wizardutil.py:241 +#: pysollib/wizardutil.py:238 pysollib/wizardutil.py:239 msgid "Sequence" msgstr "Последовательность" -#: pysollib/wizardutil.py:255 +#: pysollib/wizardutil.py:253 msgid "Use \"Super Move\" feature:" msgstr "Использовать \"Super Move\"" -#: pysollib/wizardutil.py:263 +#: pysollib/wizardutil.py:261 msgid "Number of reserves:" msgstr "Количество резервных ячеек" -#: pysollib/wizardutil.py:270 +#: pysollib/wizardutil.py:268 msgid "Max # of accepted cards:" msgstr "Максимальное кол-во принимаемых карт:" -#: pysollib/wizardutil.py:274 +#: pysollib/wizardutil.py:272 msgid "Triangle" msgstr "Треугольник" -#: pysollib/wizardutil.py:275 pysollib/wizardutil.py:277 +#: pysollib/wizardutil.py:273 pysollib/wizardutil.py:275 msgid "Rectangle" msgstr "" -#: pysollib/wizardutil.py:285 +#: pysollib/wizardutil.py:283 msgid "# of face-down cards dealt to the tableau pile:" msgstr "Кол-во закрытых карт сдающихся на ячейку игрового стола:" -#: pysollib/wizardutil.py:292 +#: pysollib/wizardutil.py:290 msgid "# of face-up cards dealt to the tableau pile:" msgstr "Кол-во открытых карт сдающихся на ячейку игрового стола:" -#: pysollib/wizardutil.py:299 +#: pysollib/wizardutil.py:297 msgid "# of cards dealt to the reserve:" msgstr "Кол-во карт сдающихся на резервную ячейку:" -#: pysollib/wizardutil.py:306 +#: pysollib/wizardutil.py:304 msgid "Max # of dealt cards:" msgstr "Максимальное кол-во сдающихся карт:" -#: pysollib/wizardutil.py:312 +#: pysollib/wizardutil.py:310 msgid "Deal first cards to the foundations:" msgstr "Сдавать первую карту на базовые ячейки:" -#: pysollib/wizardutil.py:318 +#: pysollib/wizardutil.py:316 msgid "General" msgstr "Общие установки" -#: pysollib/wizardutil.py:324 +#: pysollib/wizardutil.py:322 msgid "Talon" msgstr "Талон" -#: pysollib/wizardutil.py:329 +#: pysollib/wizardutil.py:327 msgid "Foundations" msgstr "Базовые ячейки" -#: pysollib/wizardutil.py:336 +#: pysollib/wizardutil.py:334 msgid "Tableau" msgstr "Игровой стол" -#: pysollib/wizardutil.py:344 +#: pysollib/wizardutil.py:342 msgid "Reserves" msgstr "Резервные ячейки" @@ -4148,6 +4146,18 @@ msgstr "Всего ходов" msgid "Set font" msgstr "Настроить шрифт" +#~ msgid " cards" +#~ msgstr " карт" + +#~ msgid "No redeals." +#~ msgstr "Без пересдачи." + +#~ msgid "One redeal." +#~ msgstr "1 пересдача." + +#~ msgid " redeals." +#~ msgstr " пересдачи." + #, fuzzy #~ msgid "apple" #~ msgstr "Клён" diff --git a/pysollib/actions.py b/pysollib/actions.py index 0606aab1..f31ada60 100644 --- a/pysollib/actions.py +++ b/pysollib/actions.py @@ -66,7 +66,6 @@ from pysoltk import create_find_card_dialog from pysoltk import create_solver_dialog from help import help_about, help_html -gettext = _ # /*********************************************************************** # // menubar @@ -582,7 +581,7 @@ class PysolMenubarActions: else: player = self.app.opt.player p0, p1, p2 = player, "", _(" for ") + player - n = gettext(self.game.gameinfo.short_name) + n = _(self.game.gameinfo.short_name) # if mode == 100: d = Status_StatsDialog(self.top, game=self.game) diff --git a/pysollib/app.py b/pysollib/app.py index b98aea16..265b5f47 100644 --- a/pysollib/app.py +++ b/pysollib/app.py @@ -75,7 +75,6 @@ from pysoltk import destroy_solver_dialog from pysoltk import connect_game_solver_dialog from help import help_about, destroy_help_html -gettext = _ # /*********************************************************************** # // Options @@ -1350,12 +1349,12 @@ Please select a %s type %s. def getGameTitleName(self, id): gi = self.gdb.get(id) if gi is None: return None - return gettext(gi.name) + return _(gi.name) def getGameMenuitemName(self, id): gi = self.gdb.get(id) if gi is None: return None - return gettext(gi.short_name) + return _(gi.short_name) def getGameRulesFilename(self, id): gi = self.gdb.get(id) diff --git a/pysollib/customgame.py b/pysollib/customgame.py index dd9cdba4..89c6bd29 100644 --- a/pysollib/customgame.py +++ b/pysollib/customgame.py @@ -30,8 +30,6 @@ from hint import AbstractHint, DefaultHint, CautiousDefaultHint, Yukon_Hint from wizardutil import WizardWidgets -gettext = _ - # /*********************************************************************** # // # ************************************************************************/ diff --git a/pysollib/gamedb.py b/pysollib/gamedb.py index abbf12db..c317edd5 100644 --- a/pysollib/gamedb.py +++ b/pysollib/gamedb.py @@ -42,8 +42,6 @@ from mfxutil import Struct from resource import CSI from settings import CHECK_GAMES -gettext = _ -n_ = lambda x: x # /*********************************************************************** # // constants @@ -563,13 +561,13 @@ class GameManager: if self.__games_by_name is None: l1, l2, l3 = [], [], [] for id, gi in self.__games.items(): - name = gettext(gi.name).lower() + name = _(gi.name).lower() l1.append((name, id)) if gi.name != gi.short_name: - name = gettext(gi.short_name).lower() + name = _(gi.short_name).lower() l2.append((name, id)) for n in gi.altnames: - name = gettext(n).lower() + name = _(n).lower() l3.append((name, id, n)) l1.sort() l2.sort() diff --git a/pysollib/games/dieboesesieben.py b/pysollib/games/dieboesesieben.py index 847d7445..95b5be7c 100644 --- a/pysollib/games/dieboesesieben.py +++ b/pysollib/games/dieboesesieben.py @@ -124,5 +124,5 @@ class DieBoeseSieben(Game): registerGame(GameInfo(120, DieBoeseSieben, "Bad Seven", GI.GT_2DECK_TYPE, 2, 1, GI.SL_MOSTLY_LUCK, ranks=(0, 6, 7, 8, 9, 10, 11, 12), - altnames=("Die böse Sieben",) )) + altnames=("Die boese Sieben",) )) diff --git a/pysollib/games/gypsy.py b/pysollib/games/gypsy.py index cc8e7ac2..c91aba11 100644 --- a/pysollib/games/gypsy.py +++ b/pysollib/games/gypsy.py @@ -978,7 +978,7 @@ registerGame(GameInfo(65, Giant, "Giant", GI.GT_GYPSY, 2, 0, GI.SL_MOSTLY_SKILL)) registerGame(GameInfo(3, Irmgard, "Irmgard", GI.GT_GYPSY, 2, 0, GI.SL_MOSTLY_SKILL)) -registerGame(GameInfo(119, DieKoenigsbergerin, "Die Königsbergerin", +registerGame(GameInfo(119, DieKoenigsbergerin, "Die Koenigsbergerin", GI.GT_GYPSY, 2, 0, GI.SL_MOSTLY_SKILL)) registerGame(GameInfo(174, DieRussische, "Russian Patience", GI.GT_2DECK_TYPE | GI.GT_OPEN, 2, 0, GI.SL_MOSTLY_SKILL, diff --git a/pysollib/games/harp.py b/pysollib/games/harp.py index 552978ff..33dc45aa 100644 --- a/pysollib/games/harp.py +++ b/pysollib/games/harp.py @@ -347,8 +347,7 @@ registerGame(GameInfo(28, DoubleKlondikeByThrees, "Double Klondike by Threes", registerGame(GameInfo(25, Gargantua, "Gargantua", GI.GT_KLONDIKE, 2, 1, GI.SL_BALANCED)) registerGame(GameInfo(15, BigHarp, "Big Harp", - GI.GT_KLONDIKE, 2, 0, GI.SL_BALANCED, - altnames=("Die große Harfe",) )) + GI.GT_KLONDIKE, 2, 0, GI.SL_BALANCED)) registerGame(GameInfo(51, Steps, "Steps", GI.GT_KLONDIKE, 2, 1, GI.SL_BALANCED)) registerGame(GameInfo(273, TripleKlondike, "Triple Klondike", diff --git a/pysollib/init.py b/pysollib/init.py index a2d7e34d..b5e2a9c9 100644 --- a/pysollib/init.py +++ b/pysollib/init.py @@ -29,7 +29,34 @@ import settings # // init # ************************************************************************/ +def fix_gettext(): + def ugettext(message): + # unicoded gettext + domain = gettext._current_domain + try: + t = gettext.translation(domain, + gettext._localedirs.get(domain, None)) + except IOError: + return message + return t.ugettext(message) + gettext.ugettext = ugettext + def ungettext(msgid1, msgid2, n): + # unicoded ngettext + domain = gettext._current_domain + try: + t = gettext.translation(domain, + gettext._localedirs.get(domain, None)) + except IOError: + if n == 1: + return msgid1 + else: + return msgid2 + return t.ungettext(msgid1, msgid2, n) + gettext.ungettext = ungettext + + def init(): + fix_gettext() if os.name == 'nt' and 'LANG' not in os.environ: try: @@ -39,6 +66,7 @@ def init(): pass ##locale.setlocale(locale.LC_ALL, '') + ## install gettext ##locale_dir = 'locale' locale_dir = None if os.path.isdir(sys.path[0]): @@ -49,8 +77,14 @@ def init(): if os.path.exists(d) and os.path.isdir(d): locale_dir = d ##if locale_dir: locale_dir = os.path.normpath(locale_dir) - gettext.install('pysol', locale_dir, unicode=True) - # debug + #gettext.install('pysol', locale_dir, unicode=True) # ngettext don't work + gettext.bindtextdomain('pysol', locale_dir) + gettext.textdomain('pysol') + import __builtin__ + __builtin__.__dict__['_'] = gettext.ugettext # use unicode + __builtin__.__dict__['n_'] = lambda x: x + + ## debug if 'PYSOL_CHECK_GAMES' in os.environ or \ 'PYSOL_DEBUG' in os.environ: settings.CHECK_GAMES = True @@ -61,6 +95,7 @@ def init(): except: settings.DEBUG = 1 print 'PySol debugging: set DEBUG to', settings.DEBUG + ## init toolkit if '--gtk' in sys.argv: settings.TOOLKIT = 'gtk' diff --git a/pysollib/pysolgtk/colorsdialog.py b/pysollib/pysolgtk/colorsdialog.py index 99c55ef4..a4bcf30f 100644 --- a/pysollib/pysolgtk/colorsdialog.py +++ b/pysollib/pysolgtk/colorsdialog.py @@ -27,12 +27,6 @@ import gtk, gobject, pango import gtk.glade from gtk import gdk -# PySol imports - -# Toolkit imports - - -gettext = _ # /*********************************************************************** # // @@ -125,5 +119,5 @@ class ColorsDialog: 'label79', ): w = self.widgets_tree.get_widget(n) - w.set_text(gettext(w.get_text())) + w.set_text(_(w.get_text())) diff --git a/pysollib/pysolgtk/fontsdialog.py b/pysollib/pysolgtk/fontsdialog.py index 9b4045d5..e07edf5f 100644 --- a/pysollib/pysolgtk/fontsdialog.py +++ b/pysollib/pysolgtk/fontsdialog.py @@ -28,13 +28,8 @@ import gtk, gobject, pango import gtk.glade # PySol imports - from tkutil import create_pango_font_desc -# Toolkit imports - - -gettext = _ # /*********************************************************************** # // @@ -144,7 +139,7 @@ class FontsDialog: 'label75', ): w = self.widgets_tree.get_widget(n) - w.set_text(gettext(w.get_text())) + w.set_text(_(w.get_text())) diff --git a/pysollib/pysolgtk/menubar.py b/pysollib/pysolgtk/menubar.py index 51571d24..1f7b6001 100644 --- a/pysollib/pysolgtk/menubar.py +++ b/pysollib/pysolgtk/menubar.py @@ -50,11 +50,9 @@ from selecttile import SelectTileDialogWithPreview from selectgame import SelectGameDialogWithPreview from findcarddialog import connect_game_find_card_dialog, destroy_find_card_dialog -gettext = _ - def ltk2gtk(s): # label tk to gtk - return gettext(s).replace('&', '_') + return _(s).replace('&', '_') # /*********************************************************************** @@ -499,7 +497,7 @@ class PysolMenubar(PysolMenubarActions): label = gi.short_name else: label = gi.name - label = gettext(label) + label = _(label) menu_item = gtk.MenuItem(label) menu_item.set_data('user_data', gi.id) menu_item.connect('activate', self.mSelectGame) @@ -521,7 +519,7 @@ class PysolMenubar(PysolMenubarActions): break m = min(n+d-1, len(games)-1) n1, n2 = games[n].name, games[m].name - n1, n2 = gettext(n1), gettext(n2) + n1, n2 = _(n1), _(n2) label = n1[:3]+' - '+n2[:3] submenu = self._createSubMenu(menu, label=label) self._addGamesSubMenu(games[n:n+d], submenu) @@ -566,7 +564,7 @@ class PysolMenubar(PysolMenubarActions): # games = {} for gi in mahjongg_games: - c = gettext(gi.short_name).strip()[0] + c = _(gi.short_name).strip()[0] if c in games: games[c].append(gi) else: diff --git a/pysollib/pysolgtk/selectcardset.py b/pysollib/pysolgtk/selectcardset.py index bdff2293..12ee2bb5 100644 --- a/pysollib/pysolgtk/selectcardset.py +++ b/pysollib/pysolgtk/selectcardset.py @@ -116,7 +116,7 @@ class SelectCardsetDialogWithPreview(MfxDialog): store.set(iter, 0, root_label, 1, -1) for index, name in cardsets: child_iter = store.append(iter) - ##~ name = gettext(name) + ##~ name = _(name) store.set(child_iter, 0, name, 1, index) diff --git a/pysollib/pysolgtk/selectgame.py b/pysollib/pysolgtk/selectgame.py index 7b05acbb..1840526c 100644 --- a/pysollib/pysolgtk/selectgame.py +++ b/pysollib/pysolgtk/selectgame.py @@ -54,8 +54,6 @@ from tkwidget import MfxDialog from tkcanvas import MfxCanvas, MfxCanvasText from pysoltree import PysolTreeView -gettext = _ - # /*********************************************************************** # // Dialog @@ -197,7 +195,7 @@ class SelectGameDialogWithPreview(MfxDialog): iter = store.append(root_iter) store.set(iter, 0, root_label, 1, -1) for label, games in gl: - label = gettext(label) + label = _(label) label = label.replace("&", "") self._addGames(store, iter, label, games) @@ -209,7 +207,7 @@ class SelectGameDialogWithPreview(MfxDialog): store.set(iter, 0, root_label, 1, -1) for id, name in games: child_iter = store.append(iter) - name = gettext(name) + name = _(name) store.set(child_iter, 0, name, 1, id) @@ -294,7 +292,7 @@ class SelectGameDialogWithPreview(MfxDialog): data = [] for label, vg in GI.GAMES_BY_COMPATIBILITY: selecter = lambda gi, vg=vg: gi.id in vg - label = gettext(label) + label = _(label) data.append((label, selecter)) self._addGamesFromData(data, store, root_iter, _("by Compatibility"), all_games) @@ -475,12 +473,12 @@ class SelectGameDialogWithPreview(MfxDialog): def updateInfo(self, gameid): gi = self.app.gdb.get(gameid) # info - name = gettext(gi.name) - altnames = '\n'.join([gettext(n) for n in gi.altnames]) - category = gettext(CSI.TYPE[gi.category]) + name = _(gi.name) + altnames = '\n'.join([_(n) for n in gi.altnames]) + category = _(CSI.TYPE[gi.category]) type = '' if gi.si.game_type in GI.TYPE_NAMES: - type = gettext(GI.TYPE_NAMES[gi.si.game_type]) + type = _(GI.TYPE_NAMES[gi.si.game_type]) sl = { GI.SL_LUCK: _('Luck only'), GI.SL_MOSTLY_LUCK: _('Mostly luck'), diff --git a/pysollib/pysolgtk/soundoptionsdialog.py b/pysollib/pysolgtk/soundoptionsdialog.py index 619b428f..5b0c13d4 100644 --- a/pysollib/pysolgtk/soundoptionsdialog.py +++ b/pysollib/pysolgtk/soundoptionsdialog.py @@ -30,8 +30,6 @@ from gtk import glade # Toolkit imports from tkwidget import MfxDialog -gettext = _ - # /*********************************************************************** # // @@ -149,7 +147,7 @@ class SoundOptionsDialog: 'label78', ): w = self.widgets_tree.get_widget(n) - w.set_text(gettext(w.get_text())) + w.set_text(_(w.get_text())) w = self.widgets_tree.get_widget('enable_checkbutton') - w.set_label(gettext(w.get_label())) + w.set_label(_(w.get_label())) diff --git a/pysollib/pysolgtk/timeoutsdialog.py b/pysollib/pysolgtk/timeoutsdialog.py index f7793228..57d0aed0 100644 --- a/pysollib/pysolgtk/timeoutsdialog.py +++ b/pysollib/pysolgtk/timeoutsdialog.py @@ -26,12 +26,6 @@ __all__ = ['TimeoutsDialog'] import gtk, gobject, pango import gtk.glade -# PySol imports - -# Toolkit imports - - -gettext = _ # /*********************************************************************** # // @@ -102,5 +96,5 @@ class TimeoutsDialog: 'label30', ): w = self.widgets_tree.get_widget(n) - w.set_text(gettext(w.get_text())) + w.set_text(_(w.get_text())) diff --git a/pysollib/pysolgtk/tkstats.py b/pysollib/pysolgtk/tkstats.py index 2d50d912..24e98d42 100644 --- a/pysollib/pysolgtk/tkstats.py +++ b/pysollib/pysolgtk/tkstats.py @@ -33,8 +33,6 @@ from pysollib.stats import PysolStatsFormatter # Toolkit imports from tkwidget import MfxDialog, MfxMessageDialog -gettext = _ - # /*********************************************************************** # // @@ -50,7 +48,7 @@ class StatsFormatter(PysolStatsFormatter): for result in self.getStatResults(player, sort_by): iter = self.store.append(None) self.store.set(iter, - 0, gettext(result[0]), + 0, _(result[0]), 1, result[1], 2, result[2], 3, result[3], @@ -88,7 +86,7 @@ class LogFormatter(PysolStatsFormatter): for result in self.getLogResults(player, prev_games): iter = self.store.append(None) self.store.set(iter, - 0, gettext(result[0]), + 0, _(result[0]), 1, result[1], 2, result[2], 3, result[3], @@ -189,7 +187,7 @@ class Game_StatsDialog: 'label18', ): w = self.widgets_tree.get_widget(n) - w.set_text_with_mnemonic(gettext(w.get_label())) + w.set_text_with_mnemonic(_(w.get_label())) # simple for n in ( 'label5', @@ -198,7 +196,7 @@ class Game_StatsDialog: 'label14' ): w = self.widgets_tree.get_widget(n) - w.set_text(gettext(w.get_text())) + w.set_text(_(w.get_text())) # markup for n in ( 'label8', @@ -215,7 +213,7 @@ class Game_StatsDialog: 'label24', ): w = self.widgets_tree.get_widget(n) - s = gettext(w.get_label()) + s = _(w.get_label()) w.set_markup('%s' % s) @@ -231,7 +229,7 @@ class Game_StatsDialog: current = 0 for id in self.games_id: gi = self.app.gdb.get(id) - combo.append_text(gettext(gi.name)) + combo.append_text(_(gi.name)) if id == self.gameid: current = n n += 1 diff --git a/pysollib/resource.py b/pysollib/resource.py index 5a158587..38386c8d 100644 --- a/pysollib/resource.py +++ b/pysollib/resource.py @@ -41,7 +41,6 @@ import os, glob from mfxutil import Struct, KwStruct, EnvError from settings import DEBUG -gettext = _ # /*********************************************************************** # // Abstract diff --git a/pysollib/stack.py b/pysollib/stack.py index e1ceb546..c9b25352 100644 --- a/pysollib/stack.py +++ b/pysollib/stack.py @@ -1517,10 +1517,10 @@ class Stack: return s def getNumCards(self): + from gettext import ungettext n = len(self.cards) if n == 0 : return _('No cards') - elif n == 1 : return _('1 card') - else : return str(n)+_(' cards') + else: return ungettext('%d card', '%d cards', n) % n # /*********************************************************************** @@ -1795,11 +1795,12 @@ class TalonStack(Stack, return self.game.app.gimages.redeal def getHelp(self): + from gettext import ungettext if self.max_rounds == -2: nredeals = _('Variable redeals.') elif self.max_rounds == -1: nredeals = _('Unlimited redeals.') - elif self.max_rounds == 1: nredeals = _('No redeals.') - elif self.max_rounds == 2: nredeals = _('One redeal.') - else: nredeals = str(self.max_rounds-1)+_(' redeals.') + else: + n = self.max_rounds-1 + nredeals = ungettext('%d readeal', '%d redeals', n) % n ##round = _('Round #%d.') % self.round return _('Talon.')+' '+nredeals ##+' '+round diff --git a/pysollib/tile/menubar.py b/pysollib/tile/menubar.py index bfebb4b5..c284900c 100644 --- a/pysollib/tile/menubar.py +++ b/pysollib/tile/menubar.py @@ -68,9 +68,6 @@ from tkwidget import MfxMessageDialog #from toolbar import TOOLBAR_BUTTONS from tkconst import TOOLBAR_BUTTONS -gettext = _ -n_ = lambda x: x - # /*********************************************************************** # // @@ -120,7 +117,7 @@ def createToolbarMenu(menubar, menu): menu.add_separator() submenu = MfxMenu(menu, label=n_('Visible buttons'), tearoff=tearoff) for w in TOOLBAR_BUTTONS: - submenu.add_checkbutton(label=gettext(w.capitalize()), + submenu.add_checkbutton(label=_(w.capitalize()), variable=menubar.tkopt.toolbar_vars[w], command=lambda m=menubar, w=w: m.mOptToolbarConfig(w)) @@ -141,7 +138,7 @@ class MfxMenubar(Tkinter.Menu): def labeltoname(self, label): #print label, type(label) name = re.sub(r"[^0-9a-zA-Z]", "", label).lower() - label = gettext(label) + label = _(label) underline = label.find('&') if underline >= 0: label = label.replace('&', '') @@ -705,7 +702,7 @@ class PysolMenubar(PysolMenubarActions): games = {} for gi in mahjongg_games: - c = gettext(gi.short_name).strip()[0] + c = _(gi.short_name).strip()[0] if c in games: games[c].append(gi) else: @@ -773,7 +770,7 @@ class PysolMenubar(PysolMenubarActions): if not games[n:n+d]: break m = min(n+d-1, len(games)-1) - label = gettext(games[n].name)[:3]+' - '+gettext(games[m].name)[:3] + label = _(games[n].name)[:3]+' - '+_(games[m].name)[:3] submenu = MfxMenu(menu, label=label, name=None) self._addSelectGameSubSubMenu(games[n:n+d], submenu, command, variable) @@ -790,9 +787,9 @@ class PysolMenubar(PysolMenubarActions): gi = games[i] columnbreak = i > 0 and (i % cb) == 0 if short_name: - label = gettext(gi.short_name) + label = _(gi.short_name) else: - label = gettext(gi.name) + label = _(gi.name) ## menu.add_radiobutton(command=command, variable=variable, ## columnbreak=columnbreak, ## value=gi.id, label=label, name=None) @@ -809,7 +806,7 @@ class PysolMenubar(PysolMenubarActions): if len(games) == 0: menu.add_radiobutton(label='', name=None, state='disabled') elif len(games) > self.__cb_max*4: - games.sort(lambda a, b: cmp(gettext(a.name), gettext(b.name))) + games.sort(lambda a, b: cmp(_(a.name), _(b.name))) self._addSelectAllGameSubMenu(games, menu, command=self.mSelectGame, variable=self.tkopt.gameid) diff --git a/pysollib/tile/selectgame.py b/pysollib/tile/selectgame.py index a76c8e2f..9a24e7ad 100644 --- a/pysollib/tile/selectgame.py +++ b/pysollib/tile/selectgame.py @@ -53,7 +53,6 @@ from tkcanvas import MfxCanvasText from selecttree import SelectDialogTreeLeaf, SelectDialogTreeNode from selecttree import SelectDialogTreeData, SelectDialogTreeCanvas -gettext = _ # /*********************************************************************** # // Nodes @@ -70,7 +69,7 @@ class SelectGameNode(SelectDialogTreeNode): # key/value pairs for id, name in self.select_func: if id and name: - name = gettext(name) # name of game + name = _(name) # name of game node = SelectGameLeaf(self.tree, self, name, key=id) contents.append(node) else: @@ -79,12 +78,12 @@ class SelectGameNode(SelectDialogTreeNode): # All games ##name = '%s (%s)' % (gi.name, CSI.TYPE_NAME[gi.category]) name = gi.name - name = gettext(name) # name of game + name = _(name) # name of game node = SelectGameLeaf(self.tree, self, name, key=gi.id) contents.append(node) elif gi and self.select_func(gi): name = gi.name - name = gettext(name) # name of game + name = _(name) # name of game node = SelectGameLeaf(self.tree, self, name, key=gi.id) contents.append(node) return contents or self.tree.data.no_games @@ -112,7 +111,7 @@ class SelectGameData(SelectDialogTreeData): for name, select_func in data: if name is None or not filter(select_func, self.all_games_gi): continue - name = gettext(name) + name = _(name) name = name.replace("&", "") gg.append(SelectGameNode(None, name, select_func)) g.append(gg) @@ -139,7 +138,7 @@ class SelectGameData(SelectDialogTreeData): select_func = lambda gi, games=games: gi.id in games if name is None or not filter(select_func, self.all_games_gi): continue - name = gettext(name) + name = _(name) gg.append(SelectGameNode(None, name, select_func)) if 1 and gg: s_by_compatibility = SelectGameNode(None, _("by Compatibility"), tuple(gg)) @@ -514,12 +513,12 @@ class SelectGameDialogWithPreview(SelectGameDialog): def updateInfo(self, gameid): gi = self.app.gdb.get(gameid) # info - name = gettext(gi.name) - altnames = '\n'.join([gettext(n) for n in gi.altnames]) - category = gettext(CSI.TYPE[gi.category]) + name = _(gi.name) + altnames = '\n'.join([_(n) for n in gi.altnames]) + category = _(CSI.TYPE[gi.category]) type = '' if gi.si.game_type in GI.TYPE_NAMES: - type = gettext(GI.TYPE_NAMES[gi.si.game_type]) + type = _(GI.TYPE_NAMES[gi.si.game_type]) sl = { GI.SL_LUCK: _('Luck only'), GI.SL_MOSTLY_LUCK: _('Mostly luck'), diff --git a/pysollib/tile/solverdialog.py b/pysollib/tile/solverdialog.py index fa0270fe..1cc44fc8 100644 --- a/pysollib/tile/solverdialog.py +++ b/pysollib/tile/solverdialog.py @@ -42,8 +42,6 @@ from tkwidget import MfxDialog from tkwidget import PysolScale from tkutil import bind, unbind_destroy -gettext = _ - # /*********************************************************************** # // @@ -82,7 +80,7 @@ class SolverDialog(MfxDialog): gamenames = [''] for id in games: name = app.getGameTitleName(id) - name = gettext(name) + name = _(name) gamenames.append(name) self.games[name] = id gamenames.sort() @@ -238,7 +236,7 @@ class SolverDialog(MfxDialog): def connectGame(self, game): name = self.app.getGameTitleName(game.id) - name = gettext(name) + name = _(name) if name in self.gamenames: self.start_button.config(state='normal') i = self.gamenames.index(name) diff --git a/pysollib/tile/tkconst.py b/pysollib/tile/tkconst.py index 858703d5..efd48993 100644 --- a/pysollib/tile/tkconst.py +++ b/pysollib/tile/tkconst.py @@ -59,9 +59,6 @@ import sys, os import traceback import Tkinter -# Toolkit imports - -n_ = lambda x: x # /*********************************************************************** # // constants diff --git a/pysollib/tile/tkstats.py b/pysollib/tile/tkstats.py index 27b24ce1..3fa266b4 100644 --- a/pysollib/tile/tkstats.py +++ b/pysollib/tile/tkstats.py @@ -60,8 +60,6 @@ from tkutil import bind, unbind_destroy, loadImage from tkwidget import MfxDialog, MfxMessageDialog from tkwidget import MfxScrolledCanvas -gettext = _ - # /*********************************************************************** # // @@ -376,7 +374,7 @@ class TreeFormatter(PysolStatsFormatter): for result in self.getStatResults(player, sort_by): # result == [name, won+lost, won, lost, time, moves, perc, id] t1, t2, t3, t4, t5, t6, t7, t8 = result - t1=gettext(t1) # game name + t1 = _(t1) # game name id = self.tree.insert(None, "end", text=t1, values=(t2, t3, t4, t5, t6, t7)) self.parent_window.tree_items.append(id) @@ -395,7 +393,7 @@ class TreeFormatter(PysolStatsFormatter): num_rows = 0 for result in self.getLogResults(player, prev_games): t1, t2, t3, t4, t5, t6 = result - t1=gettext(t1) # game name + t1 = _(t1) # game name id = self.tree.insert(None, "end", text=t1, values=(t2, t3, t4)) self.parent_window.tree_items.append(id) num_rows += 1 diff --git a/pysollib/tile/toolbar.py b/pysollib/tile/toolbar.py index 56d1ff3b..4b7662c1 100644 --- a/pysollib/tile/toolbar.py +++ b/pysollib/tile/toolbar.py @@ -52,9 +52,6 @@ from tkconst import EVENT_HANDLED, EVENT_PROPAGATE from tkwidget import MfxTooltip from menubar import createToolbarMenu, MfxMenu -gettext = _ -n_ = lambda x: x - # /*********************************************************************** # // @@ -288,7 +285,7 @@ class PysolToolbar(PysolToolbarActions): 'toolbar_name' : name, 'command' : command, 'takefocus' : 0, - 'text' : gettext(label), + 'text' : _(label), } if image: kw['image'] = image diff --git a/pysollib/tile/wizarddialog.py b/pysollib/tile/wizarddialog.py index 1465d868..abf0aee3 100644 --- a/pysollib/tile/wizarddialog.py +++ b/pysollib/tile/wizarddialog.py @@ -35,8 +35,6 @@ from tkwidget import MfxDialog from tkwidget import PysolScale -gettext = _ - # /*********************************************************************** # // # ************************************************************************/ @@ -68,8 +66,8 @@ class WizardDialog(MfxDialog): if w.widget == 'preset': if w.variable is None: w.variable = StringVar() - values = [gettext(v) for v in w.values] - default = gettext(w.default) + values = [_(v) for v in w.values] + default = _(w.default) values.remove(default) values.sort() values.insert(0, default) @@ -87,7 +85,7 @@ class WizardDialog(MfxDialog): elif w.widget == 'menu': if w.variable is None: w.variable = StringVar() - values = [gettext(v) for v in w.values] + values = [_(v) for v in w.values] cb = Combobox(frame, values=tuple(values), textvariable=w.variable, state='readonly', width=32) @@ -116,7 +114,7 @@ class WizardDialog(MfxDialog): else: v = w.current_value if w.widget in ('menu', 'preset'): - v = gettext(v) + v = _(v) w.variable.set(v) row += 1 @@ -136,8 +134,8 @@ class WizardDialog(MfxDialog): v = p[w.var_name] else: v = w.default - if w.widget in ('menu', 'preset'): - v = gettext(v) + if w.widget in ('menu', 'preset', 'entry'): + v = _(v) w.variable.set(v) diff --git a/pysollib/tk/menubar.py b/pysollib/tk/menubar.py index b40a779d..92ac7b59 100644 --- a/pysollib/tk/menubar.py +++ b/pysollib/tk/menubar.py @@ -66,9 +66,6 @@ from tkwrap import MfxRadioMenuItem, MfxCheckMenuItem, StringVar #from toolbar import TOOLBAR_BUTTONS from tkconst import TOOLBAR_BUTTONS -gettext = _ -n_ = lambda x: x - # /*********************************************************************** # // @@ -119,7 +116,7 @@ def createToolbarMenu(menubar, menu): menu.add_separator() submenu = MfxMenu(menu, label=n_('Visible buttons'), tearoff=tearoff) for w in TOOLBAR_BUTTONS: - submenu.add_checkbutton(label=gettext(w.capitalize()), + submenu.add_checkbutton(label=_(w.capitalize()), variable=menubar.tkopt.toolbar_vars[w], command=lambda m=menubar, w=w: m.mOptToolbarConfig(w)) @@ -140,7 +137,7 @@ class MfxMenubar(Tkinter.Menu): def labeltoname(self, label): #print label, type(label) name = re.sub(r"[^0-9a-zA-Z]", "", label).lower() - label = gettext(label) + label = _(label) underline = label.find('&') if underline >= 0: label = label.replace('&', '') @@ -709,7 +706,7 @@ class PysolMenubar(PysolMenubarActions): games = {} for gi in mahjongg_games: - c = gettext(gi.short_name).strip()[0] + c = _(gi.short_name).strip()[0] if c in games: games[c].append(gi) else: @@ -777,7 +774,7 @@ class PysolMenubar(PysolMenubarActions): if not games[n:n+d]: break m = min(n+d-1, len(games)-1) - label = gettext(games[n].name)[:3]+' - '+gettext(games[m].name)[:3] + label = _(games[n].name)[:3]+' - '+_(games[m].name)[:3] submenu = MfxMenu(menu, label=label, name=None) self._addSelectGameSubSubMenu(games[n:n+d], submenu, command, variable) @@ -794,9 +791,9 @@ class PysolMenubar(PysolMenubarActions): gi = games[i] columnbreak = i > 0 and (i % cb) == 0 if short_name: - label = gettext(gi.short_name) + label = _(gi.short_name) else: - label = gettext(gi.name) + label = _(gi.name) ## menu.add_radiobutton(command=command, variable=variable, ## columnbreak=columnbreak, ## value=gi.id, label=label, name=None) @@ -813,7 +810,7 @@ class PysolMenubar(PysolMenubarActions): if len(games) == 0: menu.add_radiobutton(label='', name=None, state='disabled') elif len(games) > self.__cb_max*4: - games.sort(lambda a, b: cmp(gettext(a.name), gettext(b.name))) + games.sort(lambda a, b: cmp(_(a.name), _(b.name))) self._addSelectAllGameSubMenu(games, menu, command=self.mSelectGame, variable=self.tkopt.gameid) diff --git a/pysollib/tk/selectgame.py b/pysollib/tk/selectgame.py index 8eb95fd1..2fb99b69 100644 --- a/pysollib/tk/selectgame.py +++ b/pysollib/tk/selectgame.py @@ -52,7 +52,6 @@ from tkcanvas import MfxCanvasText from selecttree import SelectDialogTreeLeaf, SelectDialogTreeNode from selecttree import SelectDialogTreeData, SelectDialogTreeCanvas -gettext = _ # /*********************************************************************** # // Nodes @@ -69,7 +68,7 @@ class SelectGameNode(SelectDialogTreeNode): # key/value pairs for id, name in self.select_func: if id and name: - name = gettext(name) # name of game + name = _(name) # name of game node = SelectGameLeaf(self.tree, self, name, key=id) contents.append(node) else: @@ -78,12 +77,12 @@ class SelectGameNode(SelectDialogTreeNode): # All games ##name = '%s (%s)' % (gi.name, CSI.TYPE_NAME[gi.category]) name = gi.name - name = gettext(name) # name of game + name = _(name) # name of game node = SelectGameLeaf(self.tree, self, name, key=gi.id) contents.append(node) elif gi and self.select_func(gi): name = gi.name - name = gettext(name) # name of game + name = _(name) # name of game node = SelectGameLeaf(self.tree, self, name, key=gi.id) contents.append(node) return contents or self.tree.data.no_games @@ -111,7 +110,7 @@ class SelectGameData(SelectDialogTreeData): for name, select_func in data: if name is None or not filter(select_func, self.all_games_gi): continue - name = gettext(name) + name = _(name) name = name.replace("&", "") gg.append(SelectGameNode(None, name, select_func)) g.append(gg) @@ -138,7 +137,7 @@ class SelectGameData(SelectDialogTreeData): select_func = lambda gi, games=games: gi.id in games if name is None or not filter(select_func, self.all_games_gi): continue - name = gettext(name) + name = _(name) gg.append(SelectGameNode(None, name, select_func)) if 1 and gg: s_by_compatibility = SelectGameNode(None, _("by Compatibility"), tuple(gg)) @@ -523,12 +522,12 @@ class SelectGameDialogWithPreview(SelectGameDialog): def updateInfo(self, gameid): gi = self.app.gdb.get(gameid) # info - name = gettext(gi.name) - altnames = '\n'.join([gettext(n) for n in gi.altnames]) - category = gettext(CSI.TYPE[gi.category]) + name = _(gi.name) + altnames = '\n'.join([_(n) for n in gi.altnames]) + category = _(CSI.TYPE[gi.category]) type = '' if gi.si.game_type in GI.TYPE_NAMES: - type = gettext(GI.TYPE_NAMES[gi.si.game_type]) + type = _(GI.TYPE_NAMES[gi.si.game_type]) sl = { GI.SL_LUCK: _('Luck only'), GI.SL_MOSTLY_LUCK: _('Mostly luck'), diff --git a/pysollib/tk/solverdialog.py b/pysollib/tk/solverdialog.py index 416a2807..f7cb22e1 100644 --- a/pysollib/tk/solverdialog.py +++ b/pysollib/tk/solverdialog.py @@ -41,8 +41,6 @@ from tkconst import EVENT_HANDLED, EVENT_PROPAGATE from tkwidget import MfxDialog from tkutil import bind, unbind_destroy -gettext = _ - # /*********************************************************************** # // @@ -81,7 +79,7 @@ class SolverDialog(MfxDialog): gamenames = [''] for id in games: name = app.getGameTitleName(id) - name = gettext(name) + name = _(name) gamenames.append(name) self.games[name] = id gamenames.sort() @@ -241,7 +239,7 @@ class SolverDialog(MfxDialog): def connectGame(self, game): name = self.app.getGameTitleName(game.id) - name = gettext(name) + name = _(name) if name in self.gamenames: self.start_button.config(state='normal') i = self.gamenames.index(name) diff --git a/pysollib/tk/tkconst.py b/pysollib/tk/tkconst.py index bbdc9279..b34cbdd4 100644 --- a/pysollib/tk/tkconst.py +++ b/pysollib/tk/tkconst.py @@ -58,9 +58,6 @@ __all__ = ['tkversion', import sys, os import Tkinter -# Toolkit imports - -n_ = lambda x: x # /*********************************************************************** # // constants diff --git a/pysollib/tk/tkstats.py b/pysollib/tk/tkstats.py index ea7d60b0..c6ee263f 100644 --- a/pysollib/tk/tkstats.py +++ b/pysollib/tk/tkstats.py @@ -59,8 +59,6 @@ from tkutil import bind, unbind_destroy, loadImage from tkwidget import MfxDialog, MfxMessageDialog from tkwidget import MfxScrolledCanvas -gettext = _ - # FIXME - this file a quick hack and needs a rewrite @@ -413,7 +411,7 @@ class CanvasFormatter(PysolStatsFormatter): y += 2*self.h for result in self.getStatResults(player, sort_by): gameid = result.pop() - result[0]=gettext(result[0]) # game name + result[0] = _(result[0]) # game name self.pstats(y, result, gameid) y += self.h # @@ -434,7 +432,7 @@ class CanvasFormatter(PysolStatsFormatter): if not player or not prev_games: return 0 for result in self.getLogResults(player, prev_games): - result[0]=gettext(result[0]) # game name + result[0] = _(result[0]) # game name s = "%-25s %-20s %-17s %s" % tuple(result[:4]) id = self.canvas.create_text(1, y, text=s, anchor="nw", font=self.font, fill=self.fg) diff --git a/pysollib/tk/toolbar.py b/pysollib/tk/toolbar.py index c6aafbed..9fbd5621 100644 --- a/pysollib/tk/toolbar.py +++ b/pysollib/tk/toolbar.py @@ -52,9 +52,6 @@ from tkconst import EVENT_HANDLED, EVENT_PROPAGATE from tkwidget import MfxTooltip from menubar import createToolbarMenu, MfxMenu -gettext = _ -n_ = lambda x: x - # /*********************************************************************** # // @@ -319,7 +316,7 @@ class PysolToolbar(PysolToolbarActions): 'toolbar_name' : name, 'command' : command, 'takefocus' : 0, - 'text' : gettext(label), + 'text' : _(label), 'bd' : bd, 'relief' : button_relief, 'padx' : padx, diff --git a/pysollib/tk/wizarddialog.py b/pysollib/tk/wizarddialog.py index 5ccd0983..a75a1d46 100644 --- a/pysollib/tk/wizarddialog.py +++ b/pysollib/tk/wizarddialog.py @@ -35,8 +35,6 @@ from pysollib.wizardpresets import presets from tkwidget import MfxDialog -gettext = _ - # /*********************************************************************** # // # ************************************************************************/ @@ -69,8 +67,8 @@ class WizardDialog(MfxDialog): if w.widget == 'preset': if w.variable is None: w.variable = StringVar() - values = [gettext(v) for v in w.values] - default = gettext(w.default) + values = [_(v) for v in w.values] + default = _(w.default) values.remove(default) values.sort() values.insert(0, default) @@ -86,7 +84,7 @@ class WizardDialog(MfxDialog): elif w.widget == 'menu': if w.variable is None: w.variable = StringVar() - values = [gettext(v) for v in w.values] + values = [_(v) for v in w.values] om = OptionMenu(frame, w.variable, *values) om.grid(row=row, column=1, sticky='ew', padx=2) elif w.widget == 'spin': @@ -107,8 +105,8 @@ class WizardDialog(MfxDialog): v = w.default else: v = w.current_value - if w.widget in ('menu', 'preset'): - v = gettext(v) + if w.widget in ('menu', 'preset', 'entry'): + v = _(v) w.variable.set(v) row += 1 @@ -130,7 +128,7 @@ class WizardDialog(MfxDialog): else: v = w.default if w.widget in ('menu', 'preset'): - v = gettext(v) + v = _(v) w.variable.set(v) diff --git a/pysollib/wizardpresets.py b/pysollib/wizardpresets.py index dd03082c..65a25727 100644 --- a/pysollib/wizardpresets.py +++ b/pysollib/wizardpresets.py @@ -19,8 +19,6 @@ ## ##---------------------------------------------------------------------------## -n_ = lambda x: x - presets = { 'None': { 'preset': 'None', diff --git a/pysollib/wizardutil.py b/pysollib/wizardutil.py index 2e9e3fcd..61701644 100644 --- a/pysollib/wizardutil.py +++ b/pysollib/wizardutil.py @@ -27,8 +27,6 @@ from stack import * from layout import Layout from wizardpresets import presets -gettext = _ -n_ = lambda x: x # /*********************************************************************** # // @@ -45,13 +43,13 @@ class WizSetting: self.values = [] for k, v in self.values_map: self.values.append(k) - self.translation_map[gettext(k)] = k + self.translation_map[_(k)] = k assert self.default in self.values elif widget == 'preset': self.values = [] for v in self.values_map: self.values.append(v) - self.translation_map[gettext(v)] = v + self.translation_map[_(v)] = v assert self.default in self.values else: self.values = self.values_map @@ -71,7 +69,7 @@ WizardPresets = WizSetting( ) GameName = WizSetting( values_map = (), - default = 'My Game', + default = _('My Game'), widget = 'entry', label = _('Name:'), var_name = 'name', @@ -186,7 +184,7 @@ FoundMaxMove = WizSetting( FoundEqual = WizSetting( values_map = (0, 1), default = 1, - label = _('First card sets base rank:'), + label = _('First card sets base cards:'), var_name = 'found_equal', widget = 'check', ) diff --git a/scripts/all_games.py b/scripts/all_games.py index 9d4ca690..4f7b4a9f 100755 --- a/scripts/all_games.py +++ b/scripts/all_games.py @@ -6,8 +6,9 @@ import sys, os, re, time from pprint import pprint os.environ['LANG'] = 'C' -import gettext -gettext.install('pysol', 'locale', unicode=True) +import __builtin__ +__builtin__.__dict__['_'] = lambda x: x +__builtin__.__dict__['n_'] = lambda x: x pysollib_path = os.path.join(sys.path[0], '..') sys.path[0] = os.path.normpath(pysollib_path) diff --git a/scripts/pygettext.py b/scripts/pygettext.py new file mode 100644 index 00000000..120f3611 --- /dev/null +++ b/scripts/pygettext.py @@ -0,0 +1,715 @@ +#! /usr/bin/env python +# -*- coding: iso-8859-1 -*- +# Originally written by Barry Warsaw +# +# Minimally patched to make it even more xgettext compatible +# by Peter Funk +# +# 2002-11-22 Jrgen Hermann +# Added checks that _() only contains string literals, and +# command line args are resolved to module lists, i.e. you +# can now pass a filename, a module or package name, or a +# directory (including globbing chars, important for Win32). +# Made docstring fit in 80 chars wide displays using pydoc. +# +# 2007-05-11 Scomoroh +# Added very simple support for ngettext +# + +# for selftesting +try: + import fintl + _ = fintl.gettext +except ImportError: + _ = lambda s: s + +__doc__ = _("""pygettext -- Python equivalent of xgettext(1) + +Many systems (Solaris, Linux, Gnu) provide extensive tools that ease the +internationalization of C programs. Most of these tools are independent of +the programming language and can be used from within Python programs. +Martin von Loewis' work[1] helps considerably in this regard. + +There's one problem though; xgettext is the program that scans source code +looking for message strings, but it groks only C (or C++). Python +introduces a few wrinkles, such as dual quoting characters, triple quoted +strings, and raw strings. xgettext understands none of this. + +Enter pygettext, which uses Python's standard tokenize module to scan +Python source code, generating .pot files identical to what GNU xgettext[2] +generates for C and C++ code. From there, the standard GNU tools can be +used. + +A word about marking Python strings as candidates for translation. GNU +xgettext recognizes the following keywords: gettext, dgettext, dcgettext, +and gettext_noop. But those can be a lot of text to include all over your +code. C and C++ have a trick: they use the C preprocessor. Most +internationalized C source includes a #define for gettext() to _() so that +what has to be written in the source is much less. Thus these are both +translatable strings: + + gettext("Translatable String") + _("Translatable String") + +Python of course has no preprocessor so this doesn't work so well. Thus, +pygettext searches only for _() by default, but see the -k/--keyword flag +below for how to augment this. + + [1] http://www.python.org/workshops/1997-10/proceedings/loewis.html + [2] http://www.gnu.org/software/gettext/gettext.html + +NOTE: pygettext attempts to be option and feature compatible with GNU +xgettext where ever possible. However some options are still missing or are +not fully implemented. Also, xgettext's use of command line switches with +option arguments is broken, and in these cases, pygettext just defines +additional switches. + +Usage: pygettext [options] inputfile ... + +Options: + + -a + --extract-all + Extract all strings. + + -d name + --default-domain=name + Rename the default output file from messages.pot to name.pot. + + -E + --escape + Replace non-ASCII characters with octal escape sequences. + + -D + --docstrings + Extract module, class, method, and function docstrings. These do + not need to be wrapped in _() markers, and in fact cannot be for + Python to consider them docstrings. (See also the -X option). + + -h + --help + Print this help message and exit. + + -k word + --keyword=word + Keywords to look for in addition to the default set, which are: + %(DEFAULTKEYWORDS)s + + You can have multiple -k flags on the command line. + + -K + --no-default-keywords + Disable the default set of keywords (see above). Any keywords + explicitly added with the -k/--keyword option are still recognized. + + --no-location + Do not write filename/lineno location comments. + + -n + --add-location + Write filename/lineno location comments indicating where each + extracted string is found in the source. These lines appear before + each msgid. The style of comments is controlled by the -S/--style + option. This is the default. + + -o filename + --output=filename + Rename the default output file from messages.pot to filename. If + filename is `-' then the output is sent to standard out. + + -p dir + --output-dir=dir + Output files will be placed in directory dir. + + -S stylename + --style stylename + Specify which style to use for location comments. Two styles are + supported: + + Solaris # File: filename, line: line-number + GNU #: filename:line + + The style name is case insensitive. GNU style is the default. + + -v + --verbose + Print the names of the files being processed. + + -V + --version + Print the version of pygettext and exit. + + -w columns + --width=columns + Set width of output to columns. + + -x filename + --exclude-file=filename + Specify a file that contains a list of strings that are not be + extracted from the input files. Each string to be excluded must + appear on a line by itself in the file. + + -X filename + --no-docstrings=filename + Specify a file that contains a list of files (one per line) that + should not have their docstrings extracted. This is only useful in + conjunction with the -D option above. + +If `inputfile' is -, standard input is read. +""") + +import os +import imp +import sys +import glob +import time +import getopt +import token +import tokenize +import operator + +__version__ = '1.6con' + +default_keywords = ['_'] +DEFAULTKEYWORDS = ', '.join(default_keywords) +default_ngettext_keywords = ['ngettext'] + +EMPTYSTRING = '' + + + +# The normal pot-file header. msgmerge and Emacs's po-mode work better if it's +# there. +pot_header = _('''\ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR ORGANIZATION +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\\n" +"POT-Creation-Date: %(time)s\\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n" +"Last-Translator: FULL NAME \\n" +"Language-Team: LANGUAGE \\n" +"MIME-Version: 1.0\\n" +"Content-Type: text/plain; charset=CHARSET\\n" +"Content-Transfer-Encoding: ENCODING\\n" +"Generated-By: pygettext.py %(version)s\\n" + +''') + + +def usage(code, msg=''): + print >> sys.stderr, __doc__ % globals() + if msg: + print >> sys.stderr, msg + sys.exit(code) + + + +escapes = [] + +def make_escapes(pass_iso8859): + global escapes + if pass_iso8859: + # Allow iso-8859 characters to pass through so that e.g. 'msgid + # "Hhe"' would result not result in 'msgid "H\366he"'. Otherwise we + # escape any character outside the 32..126 range. + mod = 128 + else: + mod = 256 + for i in range(256): + if 32 <= (i % mod) <= 126: + escapes.append(chr(i)) + else: + escapes.append("\\%03o" % i) + escapes[ord('\\')] = '\\\\' + escapes[ord('\t')] = '\\t' + escapes[ord('\r')] = '\\r' + escapes[ord('\n')] = '\\n' + escapes[ord('\"')] = '\\"' + + +def escape(s): + global escapes + s = list(s) + for i in range(len(s)): + s[i] = escapes[ord(s[i])] + return EMPTYSTRING.join(s) + + +def safe_eval(s): + # unwrap quotes, safely + return eval(s, {'__builtins__':{}}, {}) + + +def normalize(s): + # This converts the various Python string types into a format that is + # appropriate for .po files, namely much closer to C style. + lines = s.split('\n') + if len(lines) == 1: + s = '"' + escape(s) + '"' + else: + if not lines[-1]: + del lines[-1] + lines[-1] = lines[-1] + '\n' + for i in range(len(lines)): + lines[i] = escape(lines[i]) + lineterm = '\\n"\n"' + s = '""\n"' + lineterm.join(lines) + '"' + return s + + +def containsAny(str, set): + """Check whether 'str' contains ANY of the chars in 'set'""" + return 1 in [c in str for c in set] + + +def _visit_pyfiles(list, dirname, names): + """Helper for getFilesForName().""" + # get extension for python source files + if not globals().has_key('_py_ext'): + global _py_ext + _py_ext = [triple[0] for triple in imp.get_suffixes() + if triple[2] == imp.PY_SOURCE][0] + + # don't recurse into CVS directories + if 'CVS' in names: + names.remove('CVS') + + # add all *.py files to list + list.extend( + [os.path.join(dirname, file) for file in names + if os.path.splitext(file)[1] == _py_ext] + ) + + +def _get_modpkg_path(dotted_name, pathlist=None): + """Get the filesystem path for a module or a package. + + Return the file system path to a file for a module, and to a directory for + a package. Return None if the name is not found, or is a builtin or + extension module. + """ + # split off top-most name + parts = dotted_name.split('.', 1) + + if len(parts) > 1: + # we have a dotted path, import top-level package + try: + file, pathname, description = imp.find_module(parts[0], pathlist) + if file: file.close() + except ImportError: + return None + + # check if it's indeed a package + if description[2] == imp.PKG_DIRECTORY: + # recursively handle the remaining name parts + pathname = _get_modpkg_path(parts[1], [pathname]) + else: + pathname = None + else: + # plain name + try: + file, pathname, description = imp.find_module( + dotted_name, pathlist) + if file: + file.close() + if description[2] not in [imp.PY_SOURCE, imp.PKG_DIRECTORY]: + pathname = None + except ImportError: + pathname = None + + return pathname + + +def getFilesForName(name): + """Get a list of module files for a filename, a module or package name, + or a directory. + """ + if not os.path.exists(name): + # check for glob chars + if containsAny(name, "*?[]"): + files = glob.glob(name) + list = [] + for file in files: + list.extend(getFilesForName(file)) + return list + + # try to find module or package + name = _get_modpkg_path(name) + if not name: + return [] + + if os.path.isdir(name): + # find all python files in directory + list = [] + os.path.walk(name, _visit_pyfiles, list) + return list + elif os.path.exists(name): + # a single file + return [name] + + return [] + + +class TokenEater: + def __init__(self, options): + self.__options = options + self.__messages = {} + self.__state = self.__waiting + self.__data = [] + self.__lineno = -1 + self.__freshmodule = 1 + self.__curfile = None + self.__ngettext = False + + def __call__(self, ttype, tstring, stup, etup, line): + # dispatch +## import token +## print >> sys.stderr, 'ttype:', token.tok_name[ttype], \ +## 'tstring:', tstring + self.__state(ttype, tstring, stup[0]) + + def __waiting(self, ttype, tstring, lineno): + opts = self.__options + # Do docstring extractions, if enabled + if opts.docstrings and not opts.nodocstrings.get(self.__curfile): + # module docstring? + if self.__freshmodule: + if ttype == tokenize.STRING: + self.__addentry(safe_eval(tstring), lineno, isdocstring=1) + self.__freshmodule = 0 + elif ttype not in (tokenize.COMMENT, tokenize.NL): + self.__freshmodule = 0 + return + # class docstring? + if ttype == tokenize.NAME and tstring in ('class', 'def'): + self.__state = self.__suiteseen + return + if ttype == tokenize.NAME and tstring in opts.keywords: + self.__state = self.__keywordseen + self.__ngettext = tstring in opts.ngettext_keywords + + def __suiteseen(self, ttype, tstring, lineno): + # ignore anything until we see the colon + if ttype == tokenize.OP and tstring == ':': + self.__state = self.__suitedocstring + + def __suitedocstring(self, ttype, tstring, lineno): + # ignore any intervening noise + if ttype == tokenize.STRING: + self.__addentry(safe_eval(tstring), lineno, isdocstring=1) + self.__state = self.__waiting + elif ttype not in (tokenize.NEWLINE, tokenize.INDENT, + tokenize.COMMENT): + # there was no class docstring + self.__state = self.__waiting + + def __keywordseen(self, ttype, tstring, lineno): + if ttype == tokenize.OP and tstring == '(': + self.__data = [] + self.__lineno = lineno + self.__state = self.__openseen + else: + self.__state = self.__waiting + + def __openseen(self, ttype, tstring, lineno): + if ttype == tokenize.OP and tstring == ')': + # We've seen the last of the translatable strings. Record the + # line number of the first line of the strings and update the list + # of messages seen. Reset state for the next batch. If there + # were no strings inside _(), then just ignore this entry. + if self.__data: + if self.__ngettext: + data = [] + msg = [] + for s in self.__data: + if s is not None: + msg.append(s) + else: + data.append(EMPTYSTRING.join(msg)) + msg = [] + if len(data) == 2 and data[0] and data[1]: + self.__addentry(tuple(data)) + elif self.__options.verbose: + print >> sys.stderr, _( + '*** %(file)s:%(lineno)s: incorrect ngettext format' + ) % { + 'file': self.__curfile, + 'lineno': self.__lineno + } + else: + self.__addentry(EMPTYSTRING.join(self.__data)) + self.__state = self.__waiting + elif ttype == tokenize.STRING: + self.__data.append(safe_eval(tstring)) + elif ttype not in [tokenize.COMMENT, token.INDENT, token.DEDENT, + token.NEWLINE, tokenize.NL]: + if self.__ngettext and ttype == tokenize.OP and tstring == ',': + self.__data.append(None) + elif self.__ngettext: # and ttype == tokenize.NUMBER: + pass + else: + # warn if we see anything else than STRING or whitespace + if self.__options.verbose: + print >> sys.stderr, _( + '*** %(file)s:%(lineno)s: Seen unexpected token "%(token)s"' + ) % { + 'token': tstring, + 'file': self.__curfile, + 'lineno': self.__lineno + } + self.__state = self.__waiting + + def __addentry(self, msg, lineno=None, isdocstring=0): + if lineno is None: + lineno = self.__lineno + if not msg in self.__options.toexclude: + entry = (self.__curfile, lineno) + self.__messages.setdefault(msg, {})[entry] = isdocstring + + def set_filename(self, filename): + self.__curfile = filename + self.__freshmodule = 1 + + def write(self, fp): + options = self.__options + timestamp = time.ctime(time.time()) + # The time stamp in the header doesn't have the same format as that + # generated by xgettext... + print >> fp, pot_header % {'time': timestamp, 'version': __version__} + # Sort the entries. First sort each particular entry's keys, then + # sort all the entries by their first item. + reverse = {} + for k, v in self.__messages.items(): + keys = v.keys() + keys.sort() + reverse.setdefault(tuple(keys), []).append((k, v)) + rkeys = reverse.keys() + rkeys.sort() + for rkey in rkeys: + rentries = reverse[rkey] + rentries.sort() + for k, v in rentries: + isdocstring = 0 + # If the entry was gleaned out of a docstring, then add a + # comment stating so. This is to aid translators who may wish + # to skip translating some unimportant docstrings. + if reduce(operator.__add__, v.values()): + isdocstring = 1 + # k is the message string, v is a dictionary-set of (filename, + # lineno) tuples. We want to sort the entries in v first by + # file name and then by line number. + v = v.keys() + v.sort() + if not options.writelocations: + pass + # location comments are different b/w Solaris and GNU: + elif options.locationstyle == options.SOLARIS: + for filename, lineno in v: + d = {'filename': filename, 'lineno': lineno} + print >>fp, _( + '# File: %(filename)s, line: %(lineno)d') % d + elif options.locationstyle == options.GNU: + # fit as many locations on one line, as long as the + # resulting line length doesn't exceeds 'options.width' + locline = '#:' + for filename, lineno in v: + d = {'filename': filename, 'lineno': lineno} + s = _(' %(filename)s:%(lineno)d') % d + if len(locline) + len(s) <= options.width: + locline = locline + s + else: + print >> fp, locline + locline = "#:" + s + if len(locline) > 2: + print >> fp, locline + if isdocstring: + print >> fp, '#, docstring' + if isinstance(k, basestring): + print >> fp, 'msgid', normalize(k) + print >> fp, 'msgstr ""\n' + else: + # ngettext + assert isinstance(k, tuple) + assert len(k) == 2 + print >> fp, 'msgid', normalize(k[0]) + print >> fp, 'msgid_plural', normalize(k[1]) + print >> fp, 'msgstr[0] ""' + print >> fp, 'msgstr[1] ""\n' + + + +def main(): + global default_keywords + try: + opts, args = getopt.getopt( + sys.argv[1:], + 'ad:DEhk:Kno:p:S:Vvw:x:X:', + ['extract-all', 'default-domain=', 'escape', 'help', + 'keyword=', 'no-default-keywords', 'ngettext-keyword=', + 'add-location', 'no-location', 'output=', 'output-dir=', + 'style=', 'verbose', 'version', 'width=', 'exclude-file=', + 'docstrings', 'no-docstrings', + ]) + except getopt.error, msg: + usage(1, msg) + + # for holding option values + class Options: + # constants + GNU = 1 + SOLARIS = 2 + # defaults + extractall = 0 # FIXME: currently this option has no effect at all. + escape = 0 + keywords = [] + ngettext_keywords = [] + outpath = '' + outfile = 'messages.pot' + writelocations = 1 + locationstyle = GNU + verbose = 0 + width = 78 + excludefilename = '' + docstrings = 0 + nodocstrings = {} + + options = Options() + locations = {'gnu' : options.GNU, + 'solaris' : options.SOLARIS, + } + + # parse options + for opt, arg in opts: + if opt in ('-h', '--help'): + usage(0) + elif opt in ('-a', '--extract-all'): + options.extractall = 1 + elif opt in ('-d', '--default-domain'): + options.outfile = arg + '.pot' + elif opt in ('-E', '--escape'): + options.escape = 1 + elif opt in ('-D', '--docstrings'): + options.docstrings = 1 + elif opt in ('-k', '--keyword'): + options.keywords.append(arg) + elif opt in ('--ngettext-keyword'): + options.ngettext_keywords.append(arg) + elif opt in ('-K', '--no-default-keywords'): + default_keywords = [] + elif opt in ('-n', '--add-location'): + options.writelocations = 1 + elif opt in ('--no-location',): + options.writelocations = 0 + elif opt in ('-S', '--style'): + options.locationstyle = locations.get(arg.lower()) + if options.locationstyle is None: + usage(1, _('Invalid value for --style: %s') % arg) + elif opt in ('-o', '--output'): + options.outfile = arg + elif opt in ('-p', '--output-dir'): + options.outpath = arg + elif opt in ('-v', '--verbose'): + options.verbose = 1 + elif opt in ('-V', '--version'): + print _('pygettext.py (xgettext for Python) %s') % __version__ + sys.exit(0) + elif opt in ('-w', '--width'): + try: + options.width = int(arg) + except ValueError: + usage(1, _('--width argument must be an integer: %s') % arg) + elif opt in ('-x', '--exclude-file'): + options.excludefilename = arg + elif opt in ('-X', '--no-docstrings'): + fp = open(arg) + try: + while 1: + line = fp.readline() + if not line: + break + options.nodocstrings[line[:-1]] = 1 + finally: + fp.close() + + # calculate escapes + make_escapes(options.escape) + + # calculate all keywords + options.keywords.extend(default_keywords) + + options.ngettext_keywords.extend(default_ngettext_keywords) + options.keywords.extend(options.ngettext_keywords) + + # initialize list of strings to exclude + if options.excludefilename: + try: + fp = open(options.excludefilename) + options.toexclude = fp.readlines() + fp.close() + except IOError: + print >> sys.stderr, _( + "Can't read --exclude-file: %s") % options.excludefilename + sys.exit(1) + else: + options.toexclude = [] + + # resolve args to module lists + expanded = [] + for arg in args: + if arg == '-': + expanded.append(arg) + else: + expanded.extend(getFilesForName(arg)) + args = expanded + + # slurp through all the files + eater = TokenEater(options) + for filename in args: + if filename == '-': + if options.verbose: + print _('Reading standard input') + fp = sys.stdin + closep = 0 + else: + if options.verbose: + print _('Working on %s') % filename + fp = open(filename) + closep = 1 + try: + eater.set_filename(filename) + try: + tokenize.tokenize(fp.readline, eater) + except tokenize.TokenError, e: + print >> sys.stderr, '%s: %s, line %d, column %d' % ( + e[0], filename, e[1][0], e[1][1]) + finally: + if closep: + fp.close() + + # write the output + if options.outfile == '-': + fp = sys.stdout + closep = 0 + else: + if options.outpath: + options.outfile = os.path.join(options.outpath, options.outfile) + fp = open(options.outfile, 'w') + closep = 1 + try: + eater.write(fp) + finally: + if closep: + fp.close() + + +if __name__ == '__main__': + main() + # some more test strings + _(u'a unicode string') + # this one creates a warning + _('*** Seen unexpected token "%(token)s"') % {'token': 'test'} + _('more' 'than' 'one' 'string')