Anonymous avatar Anonymous committed 18bab92

Add translation logic and German translation.

Comments (0)

Files changed (11)

domination/cards/__init__.py

                 for info_player in game.following_participants(other_player):
                     yield InfoRequest(
                         game, info_player,
-                        _("%s reacts with:") % (other_player.name, ), [card])
+                        _("%s reacts with:", [other_player.name]), [card])
                 gen = card.defend_action(game, other_player, self)
                 item = None
                 while True:

domination/cards/alchemy.py

         player.draw_cards(4)
         player.hand, new_cards = player.hand[:-4], player.hand[-4:]
         for info_player in game.participants:
-            yield InfoRequest(game, info_player, _("%s reveals:") % (player.name, ),
+            yield InfoRequest(game, info_player, _("%s reveals:", [player.name]),
                     new_cards)
         copper_and_potions = [c for c in new_cards if isinstance(c, (Copper, Potion))]
         remaining_cards = [c for c in new_cards if not isinstance(c, (Copper, Potion))]
         for other_player in game.participants:
             if other_player is not player:
                 yield InfoRequest(game, other_player,
-                        _("%s trashes these cards:") % (player.name, ), cards)
+                        _("%s trashes these cards:", [player.name]), cards)
 
 
 class Familiar(AttackCard):
                     continue
                 other_player.discard_pile.append(curse_cards.pop())
                 yield InfoRequest(game, other_player,
-                        _("%s curses you. You gain a curse card.") % (player.name, ), [])
+                        _("%s curses you. You gain a curse card.", [player.name]), [])
                 for val in game.check_empty_pile("Curse"):
                     yield val
 
                 break
             card = player.hand.pop()
             for info_player in game.participants:
-                yield InfoRequest(game, info_player, _("%s reveals:") % (player.name, ), [card])
+                yield InfoRequest(game, info_player, _("%s reveals:", [player.name]), [card])
             if isinstance(card, ActionCard) and not isinstance(card, Golem):
                 found_cards.append(card)
                 action_cards_found += 1
                 break
             card = player.hand.pop()
             for info_player in game.participants:
-                yield InfoRequest(game, info_player, _("%s reveals:") % (player.name, ),
+                yield InfoRequest(game, info_player, _("%s reveals:", [player.name]),
                         [card])
             player.hand.append(card)
             if not isinstance(card, ActionCard):
             card = cards[0]
             for other_player in game.following_participants(player):
                 yield InfoRequest(game, other_player,
-                        _("%s trashes this card:") % (player.name, ), cards)
+                        _("%s trashes this card:", [player.name]), cards)
             card.trash(game, player)
             if isinstance(card, ActionCard):
                 with fetch_card_from_supply(game, Duchy) as new_card:
                     player.discard_pile.append(new_card)
                     for info_player in game.following_participants(player):
                         yield InfoRequest(game, info_player,
-                            _("%s gains:") % (player.name, ), [new_card])
+                            _("%s gains:", [player.name]), [new_card])
             if isinstance(card, TreasureCard):
                 with fetch_card_from_supply(game, Transmute) as new_card:
                     player.discard_pile.append(new_card)
                     for info_player in game.following_participants(player):
                         yield InfoRequest(game, info_player,
-                                _("%s gains:") % (player.name, ), [new_card])
+                                _("%s gains:", [player.name]), [new_card])
             if isinstance(card, VictoryCard):
                 with fetch_card_from_supply(game, Gold) as new_card:
                     player.discard_pile.append(new_card)
                     for info_player in game.following_participants(player):
                         yield InfoRequest(game, info_player,
-                                _("%s gains:") % (player.name, ), [new_card])
+                                _("%s gains:", [player.name]), [new_card])
 
 
 class University(ActionCard):
             for info_player in game.participants:
                 if info_player is not player:
                     yield InfoRequest(game, info_player,
-                            _("%s gains:") % (player.name, ), [new_card])
+                            _("%s gains:", [player.name]), [new_card])
             for val in game.check_empty_pile(card_cls.__name__):
                 yield val
 

domination/cards/base.py

         for other_player in game.participants:
             if other_player is not player:
                 yield InfoRequest(game, other_player,
-                        _("%s trashes these cards:") % (player.name, ), cards)
+                        _("%s trashes these cards:", [player.name]), cards)
 
 class Cellar(ActionCard):
     name = _("Cellar")
             for other_player in game.participants:
                 if other_player is not player:
                     yield InfoRequest(game, other_player,
-                            _("%s discards these cards:") % (player.name, ), cards)
+                            _("%s discards these cards:", [player.name]), cards)
 
 class Market(ActionCard):
     name = _("Market")
             if count <= 0:
                 continue
             cards = yield SelectHandCards(game, other_player, count_lower=count, count_upper=count,
-                    msg=_("%s played Militia. Which cards do you want to discard?") % (player.name, ))
+                    msg=_("%s played Militia. Which cards do you want to discard?", [player.name]))
             for card in cards:
                 card.discard(other_player)
             for info_player in game.participants:
                 if info_player is not other_player:
                     # TODO: info players may only see one of the discarded cards
                     yield InfoRequest(game, info_player,
-                            _("%s discards these cards:") % (other_player.name, ), cards)
+                            _("%s discards these cards:", [other_player.name]), cards)
 
 class Mine(ActionCard):
     name = _("Mine")
             for info_player in game.participants:
                 if info_player is not player:
                     yield InfoRequest(game, info_player,
-                            _("%s trashes:") % (player.name, ), [card])
+                            _("%s trashes:", [player.name]), [card])
                     yield InfoRequest(game, info_player,
-                            _("%s gains:") % (player.name, ), [new_card])
+                            _("%s gains:", [player.name]), [new_card])
             for val in game.check_empty_pile(card_cls.__name__):
                 yield val
 
             for info_player in game.participants:
                 if info_player is not player:
                     yield InfoRequest(game, info_player,
-                            _("%s trashes:") % (player.name, ), [card])
+                            _("%s trashes:", [player.name]), [card])
                     yield InfoRequest(game, info_player,
-                            _("%s gains:") % (player.name, ), [new_card])
+                            _("%s gains:", [player.name]), [new_card])
             for val in game.check_empty_pile(card_cls.__name__):
                 yield val
 
                 break
             card = player.hand.pop()
             for info_player in game.participants:
-                yield InfoRequest(game, info_player, _("%s reveals:") % (player.name, ), [card])
+                yield InfoRequest(game, info_player, _("%s reveals:", [player.name]), [card])
             if isinstance(card, TreasureCard):
                 player.hand.append(card)
                 treasure_cards_found += 1
                 other_player.deck.append(card)
                 other_player.hand.remove(card)
                 for info_player in game.following_participants(other_player):
-                    yield InfoRequest(game, info_player, _("%s reveals a card:") % (other_player.name, ), [card])
+                    yield InfoRequest(game, info_player, _("%s reveals a card:", [other_player.name]), [card])
             else:
                 for info_player in game.following_participants(other_player):
-                    yield InfoRequest(game, info_player, _("%s reveals his hand:") % \
-                            (other_player.name, ), other_player.hand)
+                    yield InfoRequest(game, info_player, _("%s reveals his hand:", [other_player.name]), other_player.hand)
 
 class Chancellor(ActionCard):
     name = _("Chancellor")
         player.discard_pile.append(new_card)
         for info_player in game.following_participants(player):
             yield InfoRequest(game, info_player,
-                    _("%s gains:") % (player.name, ), [new_card])
+                    _("%s gains:", [player.name]), [new_card])
         for val in game.check_empty_pile(card_cls.__name__):
             yield val
 
             drawn_card = player.hand[-1]
             if isinstance(drawn_card, ActionCard) and (yield YesNoQuestion(game,
                 player, _("Do you want to set aside"
-                " the card '%s'?") % (drawn_card.name, ))):
+                " the card '%s'?", [drawn_card.name]))):
                 player.hand.pop(-1)
                 set_aside_cards.append(drawn_card)
         player.discard_pile.extend(set_aside_cards)
             card.trash(game, player)
             for info_player in game.following_participants(player):
                 yield InfoRequest(game, info_player,
-                        _("%s trashes:") % (player.name, ), [card])
+                        _("%s trashes:", [player.name]), [card])
 
 class Spy(AttackCard):
     name = _("Spy")
             other_player.discard_pile.extend(cards)
         for card in trashed:
             if (yield YesNoQuestion(game, player,
-                _("Do you want to have the card '%s'?") % (card.name, ))):
+                _("Do you want to have the card '%s'?", [card.name]))):
                 player.discard_pile.append(card)
                 for info_player in game.following_participants(player):
                     yield InfoRequest(game, info_player, _("%s picks up this card from trash:") %
         if not [c for c in player.hand if isinstance(c, ActionCard)]:
             return
         action_cards = (yield SelectActionCard(self, player,
-            _("Which action card do you want to play on the throne room? (%i actions left)")
-                % (player.remaining_actions, )))
+            _("Which action card do you want to play on the throne room? (%i actions left)",
+               [player.remaining_actions])))
         if action_cards:
             card = action_cards[0]
             player.hand.remove(card)
                     continue
                 other_player.discard_pile.append(curse_cards.pop())
                 yield InfoRequest(game, other_player,
-                        _("%s curses you. You gain a curse card.") % (player.name, ), [])
+                        _("%s curses you. You gain a curse card.", [player.name]), [])
                 for val in game.check_empty_pile("Curse"):
                     yield val
 
         player.discard_pile.append(new_card)
         for info_player in game.following_participants(player):
             yield InfoRequest(game, info_player,
-                    _("%s gains:") % (player.name, ), [new_card])
+                    _("%s gains:", [player.name]), [new_card])
         for val in game.check_empty_pile(card_cls.__name__):
             yield val
 

domination/cards/intrigue.py

             card.discard(player)
             for info_player in game.following_participants(player):
                 yield InfoRequest(game, info_player,
-                        _("%s discards:") % (player.name, ), [card])
+                        _("%s discards:", [player.name]), [card])
         else:
             estate_pile = game.supply["Estate"]
             if estate_pile:
         player.discard_pile.append(new_card)
         for info_player in game.following_participants(player):
             yield InfoRequest(game, info_player,
-                    _("%s gains:") % (player.name, ), [new_card])
+                    _("%s gains:", [player.name]), [new_card])
         for val in game.check_empty_pile(card_cls.__name__):
             yield val
 
                 card.trash(game, player)
             for other_player in game.following_participants(player):
                 yield InfoRequest(game, other_player,
-                        _("%s trashes this card:") % (player.name, ), cards)
+                        _("%s trashes this card:", [player.name]), cards)
 
 
 class MiningVillage(ActionCard):
 
         for info_player in game.following_participants(player):
             yield InfoRequest(game, info_player,
-                    _("%s chooses '%s'") % (player.name, _(dict(actions)[answer])), [])
+                    _("%(player)s chooses '%(action)s'", {player: player.name, action: _(dict(actions)[answer])}), [])
 
         if answer == "money":
             player.virtual_money += 2
 
         for info_player in game.following_participants(player):
             yield InfoRequest(game, info_player,
-                    _("%s chooses '%s'") % (player.name, _(dict(actions)[answer])), [])
+                    _("%(player)s chooses '%(action)s'", {player: player.name, action: _(dict(actions)[answer])}), [])
 
         if answer == "cards":
             player.draw_cards(3)
         for info_player in game.following_participants(player):
             chosen = ", ".join(_(dict(choices)[c]) for c in choice)
             yield InfoRequest(game, info_player,
-                    _("%s chooses '%s'") % (player.name, chosen), [])
+                    _("%(player)s chooses '%(action)s'", {player: player.name, action: chosen}), [])
 
         for item in choice:
             if item == "card":
 
         for info_player in game.participants:
             yield InfoRequest(game, info_player, _("%s reveals the top 4 cards of his"
-                " deck:") % (player.name, ), drawn)
+                " deck:", [player.name]), drawn)
         victory_cards = [c for c in drawn if isinstance(c, VictoryCard)]
         player.hand.extend(victory_cards)
         drawn = [c for c in drawn if not isinstance(c, VictoryCard)]
         for other_player in game.participants:
             if other_player is not player:
                 yield InfoRequest(game, other_player,
-                    _("%s discards these cards:") % (player.name, ), cards)
+                    _("%s discards these cards:", [player.name]), cards)
 
     def defend_action(self, game, player, card):
         player.draw_cards(2)
         player.remaining_actions += 2
 
         for info_player in game.following_participants(player):
-            yield InfoRequest(game, info_player, _("%s reveals his hand:") % \
-                    (player.name, ), player.hand[:])
+            yield InfoRequest(game, info_player, _("%s reveals his hand:",
+                    [player.name]), player.hand[:])
 
         action_cards = [c for c in player.hand if isinstance(c, ActionCard)]
         if not action_cards:
             other_player.discard_pile.append(new_card)
             for info_player in game.following_participants(player):
                 yield InfoRequest(game, info_player,
-                        _("%s gains:") % (other_player.name, ), [new_card])
+                        _("%s gains:", [other_player.name]), [new_card])
             for val in game.check_empty_pile(card_cls.__name__):
                 yield val
 
 
         for info_player in game.following_participants(player):
             yield InfoRequest(game, info_player,
-                    _("%s chooses '%s'") % (player.name, _(dict(actions)[answer])), [])
+                    _("%(player)s chooses '%(action)s'", {player: player.name, action: _(dict(actions)[answer])}), [])
 
         if answer == "cards":
             player.draw_cards(2)
             for other_player in game.participants:
                 if other_player is not player:
                     yield InfoRequest(game, other_player,
-                            _("%s trashes these cards:") % (player.name, ), cards)
+                            _("%s trashes these cards:", [player.name]), cards)
 
 
 class Torturer(AttackCard):
             msg=_("Name a card."), show_supply_count=True)
 
         for info_player in game.participants:
-            yield InfoRequest(game, info_player, _("%s names:") % (player.name, ),
+            yield InfoRequest(game, info_player, _("%s names:", [player.name]),
                     [card_cls])
         player.draw_cards(1)
         card = player.hand.pop()
         for info_player in game.participants:
-            yield InfoRequest(game, info_player, _("%s reveals:") %
-                    (player.name, ), [card])
+            yield InfoRequest(game, info_player, _("%s reveals:",
+                    [player.name]), [card])
         if isinstance(card, card_cls):
             player.hand.append(card)
         else:

domination/cards/seaside.py

         for other_player in game.participants:
             if other_player is not player:
                 yield InfoRequest(game, other_player,
-                        _("%s trashes these cards:") % (player.name, ), cards)
+                        _("%s trashes these cards:", [player.name]), cards)
 
 class SeaHag(AttackCard):
     name = _("Sea Hag")
             copper_cards = [c for c in other_player.hand if isinstance(c, Copper)]
             if copper_cards:
                 cards = yield SelectHandCards(game, other_player, count_lower=1, count_upper=1,
-                        msg=_("%s played Cutpurse. Which Copper do you want to discard?") % (player.name, ), cls=Copper)
+                        msg=_("%s played Cutpurse. Which Copper do you want to discard?", [player.name]), cls=Copper)
                 for card in cards:
                     card.discard(other_player)
                     for other_player in game.participants:
                         if other_player is not player:
                             yield InfoRequest(game, other_player,
-                                _("%s discards these cards:") % (other_player.name, ), cards)
+                                _("%s discards these cards:", [other_player.name]), cards)
             else:
                 for info_player in game.following_participants(player):
-                    yield InfoRequest(game, info_player, _("%s reveals his hand:") % \
-                            (other_player.name, ), other_player.hand[:])
+                    yield InfoRequest(game, info_player, _("%s reveals his hand:",
+                            [other_player.name]), other_player.hand[:])
 
 
 class Embargo(ActionCard):
                 continue
             count = len(other_player.hand) - 3
             cards = yield SelectHandCards(game, other_player, count_lower=count, count_upper=count,
-                    msg=_("%s played Ghost Ship. Which cards do you want to put on the top of your deck?") % (player.name, ))
+                    msg=_("%s played Ghost Ship. Which cards do you want to put on the top of your deck?", [player.name]))
             for card in cards:
                 card.backondeck(game, other_player)
 
             for other_player in game.participants:
                 if other_player is not player:
                     yield InfoRequest(game, other_player,
-                            _("%s discards these cards:") % (player.name, ), cards)
+                            _("%s discards these cards:", [player.name]), cards)
 
 class Treasury(ActionCard):
     name = _("Treasury")
             card.trash(game, player)
             for other_player in game.participants:
                 yield InfoRequest(game, other_player,
-                            _("%s trashes:") % (player.name, ), [card])
+                            _("%s trashes:", [player.name]), [card])
             for i in range(0, 4):
                 new_card = game.supply["Gold"].pop()
                 player.deck.append(new_card)
                 for other_player in game.participants:
                     yield InfoRequest(game, other_player,
-                            _("%s gains on top of his deck:") % (player.name, ), [new_card])
+                            _("%s gains on top of his deck:", [player.name]), [new_card])
                 for val in game.check_empty_pile("Gold"):
                     yield val
 

domination/gameengine.py

             player.response = []
             if player.kicked_by:
                 for participant in self.game.participants:
-                    participant.info_queue.append(InfoRequest(self.game, participant,
-                        _("%(kicker)s kicked %(kickee)s.") % {"kicker": player.kicked_by.name,
-                            "kickee": player.name}, []))
-                player.name += _(" (kicked)")
+                    participant.info_queue.append(InfoRequest(self.game, participant, _("%(kicker)s kicked %(kickee)s.", {"kicker": player.kicked_by.name, "kickee": player.name})._(app.languages[participant.preferred_language()])))
+                player.name += _(" (kicked)")._(app.languages[player.preferred_language()])
             player.response_condition.release()
 
     def cancel(self):
         for other_player in self.participants:
             if other_player is not player:
                 yield InfoRequest(self, other_player,
-                        _("%s plays:") % (player.name, ), [card])
+                        _("%s plays:", [player.name]), card)
 
         player.activated_cards.append(card)
         gen = card.activate_action(self, player)
                     while player.remaining_actions and [c for c in player.hand
                             if isinstance(c, ActionCard)]:
                         action_cards = (yield SelectActionCard(self, player,
-                            _("Which action card do you want to play? (%i actions left)")
-                                % (player.remaining_actions, )))
+                            _("Which action card do you want to play? (%i actions left)", [player.remaining_actions])))
                         if action_cards is None:
                             break
                         player.remaining_actions -= 1
                             for other_player in self.players + self.kibitzers:
                                 if other_player is not player:
                                     yield InfoRequest(self, other_player,
-                                            _("%s buys:") % (player.name, ), [card])
+                                            _("%s buys:", [player.name]), [card])
 
                         reason = self.check_end_of_game()
                         if reason:
         if not self.supply[key]:
             for player in self.players + self.kibitzers:
                 card_name = CardTypeRegistry.keys2classes((key, ))[0].name
-                yield InfoRequest(self, player, _("The pile %s is empty.") % (card_name, ), [])
+                yield InfoRequest(self, player, _("The pile %s is empty.", [card.name]), [])
 
 
     @property
 
     @property
     def selected_cards_str(self):
-        return ", ".join(c.__name__ for c in self.selected_cards)
+        return ", ".join(c.name.__str__() for c in self.selected_cards)
 
     def deal_cards(self):
         self.deal_initial_decks()

domination/main.py

 import pickle
 import optparse
 import traceback
+import gettext
 
 from flask import Flask, render_template, session, redirect, url_for, \
         request, abort, jsonify
+from gettext import NullTranslations
 
 app = Flask(__name__)
 app.secret_key = "".join(chr(random.randint(0, 255)) for _ in xrange(32))
 # init app object
 app.games = {}
 app.users = {}
+app.languages = {}
 app.game_storage_prefix = os.path.join(root_dir, "game-")
 app.game_storage_postfix = ".pickle"
-app.card_classes = [cls for cls in CardTypeRegistry.card_classes.itervalues()
-                    if cls.optional]
-app.card_classes.sort(key=lambda x: x.name)
+app.all_card_classes = [cls for cls in CardTypeRegistry.card_classes.itervalues()
+                    if cls.optional & cls.implemented ]
+app.card_classes = lambda: sorted(app.all_card_classes, key=lambda x: x.name.__str__())
 app.template_context_processors[None].append(lambda: {'app': app, 'store': get_store()})
 
+# init languages
+for language in ["de_DE"]:
+	# the path "domination/po" needs to be fixed, I guess. ~bombe
+	# also, I am not sure that I am actually using gettext correctly here. will this
+	# load all the languages independently after one another, or will there be some
+	# kind of default/fallback system implemented here unknowingly?
+	t = gettext.translation("domination", "domination/po", [language], codeset = "UTF-8")
+	app.languages[language] = t
+app.languages["en"] = NullTranslations()
+
+def extract_request_language(func):
+	def innerfunc(*args, **kwargs):
+		"""Extracts the preferred language of the browser from the request."""
+		header_value = request.headers.get("Accept-Language")
+		language_weights = header_value.split(",")
+		request.translation = app.languages["en"]
+		for language_weight in language_weights:
+			language = language_weight.split(";q=")[0].replace("-", "_")
+			if language in app.languages:
+				request.translation = app.languages[language]
+				print "language:", language
+				break
+		return func(*args, **kwargs)
+	innerfunc.__name__ = func.__name__
+	return innerfunc
 
 def needs_login(func):
     def innerfunc(*args, **kwargs):
             assert req.is_selectable(card)
             cards.append(card)
         if len(cards) < req.count_lower:
-            req.last_error = _("You need to select at least %i cards!") % (req.count_lower, )
+            req.last_error = _("You need to select at least %i cards!", [req.count_lower])
             return Ellipsis
         if req.count_upper is not None and len(cards) > req.count_upper:
-            req.last_error = _("You may select at most %i cards!") % (req.count_upper, )
+            req.last_error = _("You may select at most %i cards!", [req.count_upper])
             return Ellipsis
         return cards
     else:
     return redirect(url_for("index"))
 
 @app.route("/create_game", methods=['GET', 'POST'])
+@extract_request_language
 @needs_login
 def create_game(): # XXX check for at most 10 sets
     if request.method == 'POST':
     def transform_sets(sets):
         result = []
         for set in sets:
-            result.append((set, [c.__name__ for c in set.card_classes]))
+            result.append((set, [c.name.__str__() for c in sorted(set.card_classes, key = lambda x: x.name.__str__())]))
         return result
-    name = _("Game of %s") % (session["username"], )
+    name = _("Game of %s", [session["username"]])
     newname = name
     ctr = 0
     while newname in app.games:
Add a comment to this file

domination/po/de_DE/LC_MESSAGES/domination.mo

Binary file added.

domination/po/de_DE/LC_MESSAGES/domination.po

+msgid ""
+msgstr ""
+"Project-Id-Version: Domination\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-10-04 16:36+0100\n"
+"PO-Revision-Date: 2010-10-04 16:37+0100\n"
+"Last-Translator: David ‘Bombe’ Roden <bombe@pterodactylus.net>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
+"X-Poedit-Basepath: .\n"
+"X-Poedit-Language: German\n"
+"X-Poedit-Country: GERMANY\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"X-Poedit-SearchPath-0: ../../../.\n"
+
+#: ../../.././main.py:77
+msgid "Game not found!"
+msgstr "Spiel nicht gefunden!"
+
+#: ../../.././main.py:124
+#, python-format
+msgid "You need to select at least %i cards!"
+msgstr "Du musst mindestens %i Karten auswählen!"
+
+#: ../../.././main.py:127
+#, python-format
+msgid "You may select at most %i cards!"
+msgstr "Du darfst höchstens %i Karten auswählen!"
+
+#: ../../.././main.py:138
+msgid "Username already in use."
+msgstr "Benutzername schon belegt."
+
+#: ../../.././main.py:168
+msgid "Game with this name is already existing!"
+msgstr "Ein Spiel mit diesem Namen existiert bereits!"
+
+#: ../../.././main.py:170
+msgid "Please enter a name!"
+msgstr "Bitte einen Namen eingeben!"
+
+#: ../../.././main.py:193
+#, python-format
+msgid "Game of %s"
+msgstr "Spiel von %s"
+
+#: ../../.././main.py:259
+msgid "Game has begun or ended already."
+msgstr "Spiel hat bereits begonnen oder ist bereits beendet."
+
+#: ../../.././main.py:266
+msgid "Too many players in the game!"
+msgstr "Zu viele Spieler im Spiel!"
+
+#: ../../.././main.py:312
+msgid "You cannot kick yourself!"
+msgstr "Du kannst dich nicht selbst rauswerfen!"
+
+#: ../../.././main.py:317
+msgid "You can only kick a player if you are waiting for him!"
+msgstr "Du kannst einen Spieler nur rauswerfen, wenn auf ihn gewartet wird!"
+
+#: ../../.././main.py:320
+msgid "You cannot kick your last opponent!"
+msgstr "Du kannst deinen letzten Gegner nicht rauswerfen!"
+
+#: ../../.././gameengine.py:277
+#, python-format
+msgid "%(kicker)s kicked %(kickee)s."
+msgstr "%(kicker)s hat %(kickee)s rausgeworfen."
+
+#: ../../.././gameengine.py:278
+msgid " (kicked)"
+msgstr " (rausgeworfen)"
+
+#: ../../.././gameengine.py:328
+msgid "Aborted!"
+msgstr "Abgebrochen!"
+
+#: ../../.././gameengine.py:346
+#, python-format
+msgid "%s plays:"
+msgstr "%s spielt:"
+
+#: ../../.././gameengine.py:360
+#, python-format
+msgid "Which action card do you want to play? (%i actions left)"
+msgstr "Welche Aktionskarte möchstest du spielen? (Noch %i Aktionen übrig.)"
+
+#: ../../.././gameengine.py:376
+msgid "Which card do you want to buy?"
+msgstr "Welche Karte möchtest du kaufen?"
+
+#: ../../.././gameengine.py:390
+#, python-format
+msgid "%s buys:"
+msgstr "%s kauft:"
+
+#: ../../.././gameengine.py:449
+#, python-format
+msgid "The pile %s is empty."
+msgstr "Der Vorrat „%s“ ist erschöpft."
+
+#: ../../.././gameengine.py:526
+msgid "Province supply is empty."
+msgstr "Der Provinzvorrat ist erschöpft."
+
+#: ../../.././gameengine.py:536
+msgid "The following supplies are empty:"
+msgstr "Die folgenden Vorräte sind erschöpft:"
+
+#: ../../.././cards/__init__.py:11
+msgid "Base game"
+msgstr "Basisspiel"
+
+#: ../../.././cards/__init__.py:12
+msgid "Intrigue game"
+msgstr "Die Intrige"
+
+#: ../../.././cards/__init__.py:13
+msgid "Alchemy game"
+msgstr "Die Alchemisten"
+
+#: ../../.././cards/__init__.py:14
+msgid "Seaside game"
+msgstr "Seaside"
+
+#: ../../.././cards/__init__.py:65
+msgid "Victory/Treasure card"
+msgstr "Punktekarte/Geldkarte"
+
+#: ../../.././cards/__init__.py:67
+msgid "Action/Victory card"
+msgstr "Aktionskarte/Punktekarte"
+
+#: ../../.././cards/__init__.py:98
+msgid "Action card"
+msgstr "Aktionskarte"
+
+#: ../../.././cards/__init__.py:105
+msgid "Duration card"
+msgstr "Dauerkarte"
+
+#: ../../.././cards/__init__.py:110
+msgid "Attack card"
+msgstr "Angriffskarte"
+
+#: ../../.././cards/__init__.py:120
+msgid "Do you want to flash a card in response to the attack?"
+msgstr "Möchtest du eine Reaktionskarte aufdecken?"
+
+#: ../../.././cards/__init__.py:132
+#, python-format
+msgid "%s reacts with:"
+msgstr "%s reagiert mit:"
+
+#: ../../.././cards/__init__.py:147
+msgid "Action/Reaction card"
+msgstr "Aktionskarte/Reaktionskarte"
+
+#: ../../.././cards/__init__.py:153
+msgid "Victory card"
+msgstr "Punktekarte"
+
+#: ../../.././cards/__init__.py:159
+msgid "Treasure card"
+msgstr "Geldkarte"
+
+#: ../../.././cards/__init__.py:165
+msgid "Curse card"
+msgstr "Fluchkarte"
+
+#: ../../.././cards/alchemy.py:12
+msgid "Potion"
+msgstr "Trank"
+
+#: ../../.././cards/alchemy.py:20
+msgid "Vineyard"
+msgstr "Weinberg"
+
+#: ../../.././cards/alchemy.py:24
+msgid "Worth 1 point for every 3 Action Cards in your deck (rounded down)"
+msgstr "Wert 1 Punkt für je 3 Aktionskarten im eigenen Kartensatz (abgerundet)."
+
+#: ../../.././cards/alchemy.py:32
+msgid "Alchemist"
+msgstr "Alchemist"
+
+#: ../../.././cards/alchemy.py:36
+msgid "+2 Cards, + 1 Action. When you discard this from play, you may put this on top of your deck if you have a Potion in play."
+msgstr "+2 Karten, +1 Aktion. Wenn diese Karte und ein Trank im Spiel sind und du den Alchemisten ablegst, darfst du diesen verdeckt oben auf deinen Nachziehstapel legen."
+
+#: ../../.././cards/alchemy.py:47
+msgid "Do you want to put your alchemist card onto your deck when cleaning up?"
+msgstr "Möchtest du deinen Alchemisten auf deinen Nachziehstapel legen?"
+
+#: ../../.././cards/alchemy.py:53
+msgid "Apothecary"
+msgstr "Apotheker"
+
+#: ../../.././cards/alchemy.py:57
+msgid "+1 Card, +1 Action. Reveal the top 4 cards of your deck. Put the revealed Coppers and Potions into your hand. Put the other cards back on top of your deck in any order."
+msgstr "+1 Karte, +1 Aktion. Decke die obersten 4 Karten von deinem Nachziehstapel auf. Nimm alle aufgedeckten Kupfer und Tränke auf die Hand. Lege die übrigens Karten in beliebiger Reihenfolge verdeckt zurück auf deinen Nachziehstapel."
+
+#: ../../.././cards/alchemy.py:67
+#: ../../.././cards/alchemy.py:156
+#: ../../.././cards/alchemy.py:273
+#: ../../.././cards/base.py:258
+#: ../../.././cards/intrigue.py:553
+#, python-format
+msgid "%s reveals:"
+msgstr "%s deckt auf:"
+
+#: ../../.././cards/alchemy.py:75
+msgid "Which card do you want to put onto your deck next?"
+msgstr "Welche Karte möchtest du als nächstes auf deinen Nachziehstapel legen?"
+
+#: ../../.././cards/alchemy.py:82
+msgid "Apprentice"
+msgstr "Lehrling"
+
+#: ../../.././cards/alchemy.py:85
+msgid "+1 Action. Trash a card from your hand. +1 Card per Money it costs. +2 Cards if it has potion in its cost."
+msgstr "+1 Aktion. Entsorge eine Karte aus deiner Hand. +1 Karte pro Geld, das die Karte kostet und zusätzliche +2 Karten, wenn sie Tränke kostet."
+
+#: ../../.././cards/alchemy.py:92
+#: ../../.././cards/alchemy.py:291
+#: ../../.././cards/intrigue.py:189
+msgid "Which card do you want to trash?"
+msgstr "Welche Karte möchtest du entsorgen?"
+
+#: ../../.././cards/alchemy.py:106
+#: ../../.././cards/base.py:81
+#: ../../.././cards/seaside.py:98
+#: ../../.././cards/intrigue.py:494
+#, python-format
+msgid "%s trashes these cards:"
+msgstr "%s entsorgt diese Karten:"
+
+#: ../../.././cards/alchemy.py:110
+msgid "Familiar"
+msgstr "Vertrauter"
+
+#: ../../.././cards/alchemy.py:114
+msgid "+1 Card, +1 Action. Each other player gains a Curse."
+msgstr "+1 Karte, +1 Aktion. Jeder Mitspieler muss sich eine Fluchkarte nehmen."
+
+#: ../../.././cards/alchemy.py:128
+#: ../../.././cards/base.py:524
+#, python-format
+msgid "%s curses you. You gain a curse card."
+msgstr "%s verflucht dich. Du erhältst eine Fluchkarte."
+
+#: ../../.././cards/alchemy.py:134
+msgid "Golem"
+msgstr "Golem"
+
+#: ../../.././cards/alchemy.py:138
+msgid "Reveal cards from your deck until you reveal 2 Action cards other than Golem cards. Discard the other cards, then play the Action cards in any order."
+msgstr "Decke solange Karten von deinem Nachziehstapel auf, bis 2 Aktionskarten (außer Golem-Karten) offen liegen. Lege sofort alle übrigen aufgedeckten Karten ab und spiele die beiden Aktionskarten in beliebiger Reihenfolge."
+
+#: ../../.././cards/alchemy.py:168
+msgid "Which card do you want to play next?"
+msgstr "Welche Karte möchtest du als nächstes spielen?"
+
+#: ../../.././cards/alchemy.py:182
+msgid "Herbalist"
+msgstr "Kräuterkundiger"
+
+#: ../../.././cards/alchemy.py:185
+msgid "+1 Buy, +1 Money. If you discard this from play, you may put one of your Treasures from play on top of your deck."
+msgstr "+1 Kauf, +1 Geld. Wenn diese Karte im Spiel ist und du sie ablegst, darfst du eine deiner Geldkarten im Spiel verdeckt oben auf deinen Nachziehstapel legen."
+
+#: ../../.././cards/alchemy.py:196
+msgid "Which treasure do you want to put on top of your deck?"
+msgstr "Welche Geldkarte möchtest du auf deinen Nachziehstapel legen?"
+
+#: ../../.././cards/alchemy.py:205
+msgid "Philosophers Stone"
+msgstr "Stein der Weisen"
+
+#: ../../.././cards/alchemy.py:209
+msgid "Worth 1 Point for every three Action cards in your deck (rounded down)."
+msgstr "Wert 1 Punkt für je 3 Aktionskarten im eigenen Kartensatz (abgerundet)."
+
+#: ../../.././cards/alchemy.py:216
+msgid "Possession"
+msgstr "Besessenheit"
+
+#: ../../.././cards/alchemy.py:221
+msgid "The player to your left takes an extra turn after this one, in which you can see all the cards he can and make all decisions for him. Any cards he would gain on that turn, you gain instead, any cards of his that are trashed are set aside and returned to his discard pile at the end of turn."
+msgstr "Der Spieler links von dir führt einen Extra-Zug direkt nach diesem aus. Dabei siehst du alle Karten, die auch er sieht, und du fällst alle Entscheidungen für ihn. Alle Karten, die er nimmt, oder kauft, legst du auf deinen Ablagestapel. Alle Karten, die er in diesem Zug entsorgt, werden zur Seite gelegt und am Ende des Zuges auf seinen Ablagestapel gelegt."
+
+#: ../../.././cards/alchemy.py:231
+msgid "Scrying Pool"
+msgstr "Vision"
+
+#: ../../.././cards/alchemy.py:235
+msgid "Each player (including you) reveals the top card of his deck and either discards it or puts it back, your choice. Then reveal cards from the top of your deck until you reveal one that is not an Action. Put all your revealed cards into your hand."
+msgstr "+1 Aktion. Jeder Spieler (auch du selbst) muss die oberste Karte von seinem Nachziehstapel aufdecken. Du entscheidest, ob er sie ablegen oder auf seinen Nachziehstapel zurücklegen muss. Dann deckst du solange Karten von deinem Nachziehstapel auf, bis du eine Karte aufdeckst, die keine Aktionskarte ist. Nimm alle aufgedeckten Karten auf die Hand."
+
+#: ../../.././cards/alchemy.py:249
+#: ../../.././cards/base.py:420
+#, python-format
+msgid "%s reveals the top card of his deck:"
+msgstr "%s zeigt die oberste Karte von seinem Nachziehstapel:"
+
+#: ../../.././cards/alchemy.py:252
+#: ../../.././cards/base.py:423
+#, python-format
+msgid "Do you want to discard %(name)s's card '%(cardname)s'?"
+msgstr "Möchtest du die Karte %(cardname)s von %(name)s ablegen?"
+
+#: ../../.././cards/alchemy.py:257
+#: ../../.././cards/base.py:428
+#, python-format
+msgid "%(playername)s discarded %(player2name)s's card:"
+msgstr "%(playername)s hat diese Karte von %(player2name)s abgelegt:"
+
+#: ../../.././cards/alchemy.py:281
+msgid "Transmute"
+msgstr "Verwandlung"
+
+#: ../../.././cards/alchemy.py:285
+msgid "Trash a card from your hand. If it is an Action Card, gain a Duchy. If it is a Treasure card, gain a Transmute. If it is a Victory Card, gain a Gold."
+msgstr "Entsorge eine Karte aus deiner Hand. Ist es eine Aktionskarte, nimm dir ein Herzogtum. Ist es eine Geldkarte, nimm dir eine Verwandlung. Ist es eine Punktekarte, nimm dir ein Gold."
+
+#: ../../.././cards/alchemy.py:296
+#: ../../.././cards/intrigue.py:196
+#, python-format
+msgid "%s trashes this card:"
+msgstr "%s entsorgt diese Karte:"
+
+#: ../../.././cards/alchemy.py:303
+#: ../../.././cards/alchemy.py:309
+#: ../../.././cards/alchemy.py:315
+#: ../../.././cards/alchemy.py:340
+#: ../../.././cards/base.py:168
+#: ../../.././cards/base.py:216
+#: ../../.././cards/base.py:340
+#: ../../.././cards/base.py:553
+#: ../../.././cards/intrigue.py:152
+#: ../../.././cards/intrigue.py:454
+#, python-format
+msgid "%s gains:"
+msgstr "%s erhält:"
+
+#: ../../.././cards/alchemy.py:319
+msgid "University"
+msgstr "Universität"
+
+#: ../../.././cards/alchemy.py:323
+msgid "+2 Actions. You may gain an Action card costing up to 5."
+msgstr "+2 Aktionen. Du darfst dir eine Aktionskarte nehmen, die bis zu 5 Geld kostet."
+
+#: ../../.././cards/alchemy.py:332
+msgid "Select a action card that you want to have."
+msgstr "Wähle eine Aktionskarte aus, die du haben möchtest."
+
+#: ../../.././cards/base.py:10
+msgid "Copper"
+msgstr "Kupfer"
+
+#: ../../.././cards/base.py:16
+msgid "Silver"
+msgstr "Silber"
+
+#: ../../.././cards/base.py:22
+msgid "Gold"
+msgstr "Gold"
+
+#: ../../.././cards/base.py:28
+msgid "Estate"
+msgstr "Anwesen"
+
+#: ../../.././cards/base.py:34
+msgid "Duchy"
+msgstr "Herzogtum"
+
+#: ../../.././cards/base.py:40
+msgid "Province"
+msgstr "Provinz"
+
+#: ../../.././cards/base.py:46
+msgid "Curse"
+msgstr "Fluch"
+
+#: ../../.././cards/base.py:52
+msgid "Gardens"
+msgstr "Gärten"
+
+#: ../../.././cards/base.py:55
+msgid "Worth one point for every ten cards in your deck (rounded down)"
+msgstr "Wert 1 Punkt für je 10 Karten im eigenen Kartensatz (abgerundet)."
+
+#: ../../.././cards/base.py:64
+msgid "Chapel"
+msgstr "Kapelle"
+
+#: ../../.././cards/base.py:67
+msgid "Trash up to four cards from your hand."
+msgstr "Entsorge bis zu 4 Karten aus deiner Hand."
+
+#: ../../.././cards/base.py:72
+#: ../../.././cards/seaside.py:88
+#: ../../.././cards/intrigue.py:485
+msgid "Which cards do you want to trash?"
+msgstr "Welche Karten möchtest du entsorgen?"
+
+#: ../../.././cards/base.py:84
+msgid "Cellar"
+msgstr "Keller"
+
+#: ../../.././cards/base.py:87
+msgid "+1 Action, Discard any number of cards. +1 Card per card discarded."
+msgstr "+1 Aktion. Lege eine beliebige Anzahl Karten aus deiner Hand ab. Ziehe für jede abgelegte Karte eine Karte nach."
+
+#: ../../.././cards/base.py:92
+#: ../../.././cards/intrigue.py:380
+msgid "Which cards do you want to discard?"
+msgstr "Welche Karten möchtest du ablegen?"
+
+#: ../../.././cards/base.py:101
+#: ../../.././cards/base.py:139
+#: ../../.././cards/seaside.py:166
+#: ../../.././cards/seaside.py:269
+#: ../../.././cards/intrigue.py:389
+#, python-format
+msgid "%s discards these cards:"
+msgstr "%s legt diese Karten ab:"
+
+#: ../../.././cards/base.py:104
+msgid "Market"
+msgstr "Markt"
+
+#: ../../.././cards/base.py:107
+msgid "+1 Card, +1 Action, +1 Buy, +1 Money"
+msgstr "+1 Karte, +1 Aktion, +1 Kauf, +1 Geld."
+
+#: ../../.././cards/base.py:116
+msgid "Militia"
+msgstr "Miliz"
+
+#: ../../.././cards/base.py:119
+msgid "+2 Money, Each other player discards down to three cards in his hand."
+msgstr "+2 Geld. Jeder Mitspieler legt Karten ab, bis er nur noch 3 Karten auf der Hand hat."
+
+#: ../../.././cards/base.py:132
+#, python-format
+msgid "%s played Militia. Which cards do you want to discard?"
+msgstr "%s hat Miliz gespielt. Welche Karten möchtest du ablegen?"
+
+#: ../../.././cards/base.py:142
+msgid "Mine"
+msgstr "Mine"
+
+#: ../../.././cards/base.py:145
+msgid "Trash a treasure card in your hand. Gain a treasure card costing up to three money more, put it in your hand."
+msgstr "Entsorge eine Geldkarte aus deiner Hand. Nimm dir eine Geldkarte, die bis zu 3 Geld mehr kostet. Nimm diese Geldkarte sofort auf die Hand."
+
+#: ../../.././cards/base.py:151
+msgid "Select a treasure card you want to convert to a potentially better card."
+msgstr "Wähle eine Geldkarte aus, die du entsorgen möchtest."
+
+#: ../../.././cards/base.py:159
+msgid "Select a treasure card that you want to have."
+msgstr "Wähle eine Geldkarte aus, die du haben möchtest."
+
+#: ../../.././cards/base.py:166
+#: ../../.././cards/base.py:214
+#: ../../.././cards/base.py:399
+#: ../../.././cards/base.py:467
+#: ../../.././cards/seaside.py:353
+#: ../../.././cards/intrigue.py:440
+#, python-format
+msgid "%s trashes:"
+msgstr "%s entsorgt:"
+
+#: ../../.././cards/base.py:173
+msgid "Moat"
+msgstr "Burggraben"
+
+#: ../../.././cards/base.py:176
+msgid "+2 Cards, When another player plays an attack card, you may reveal this from your hand. If you do, you are unaffected by the attack."
+msgstr "+2 Karten. Wenn ein Mitspieler eine Angriffskarte ausspielt, kannst du diese Karte aus deiner Hand vorzeigen. Der Angriff hat dann keine Wirkung auf dich."
+
+#: ../../.././cards/base.py:188
+msgid "Remodel"
+msgstr "Umbau"
+
+#: ../../.././cards/base.py:191
+msgid "Trash a card from your hand. Gain a card costing up to 2 Money more than the trashed card."
+msgstr "Entsorge eine Karte aus deiner Hand. Nimm dir eine Karte, die bis zu 2 Geld mehr kostet als die entsorgte Karte."
+
+#: ../../.././cards/base.py:199
+msgid "Select a card you want to trash."
+msgstr "Wähle die Karte, die du entsorgen möchtest."
+
+#: ../../.././cards/base.py:206
+#: ../../.././cards/base.py:335
+#: ../../.././cards/base.py:548
+#: ../../.././cards/intrigue.py:147
+msgid "Select a card that you want to have."
+msgstr "Wähle die Karte, die du haben möchtest."
+
+#: ../../.././cards/base.py:221
+msgid "Smithy"
+msgstr "Schmiede"
+
+#: ../../.././cards/base.py:224
+#: ../../.././cards/intrigue.py:278
+msgid "+3 Cards"
+msgstr "+3 Karten."
+
+#: ../../.././cards/base.py:230
+msgid "Village"
+msgstr "Dorf"
+
+#: ../../.././cards/base.py:233
+msgid "+1 Card, +2 Actions"
+msgstr "+1 Karte, +2 Aktionen."
+
+#: ../../.././cards/base.py:240
+msgid "Adventurer"
+msgstr "Abenteurer"
+
+#: ../../.././cards/base.py:243
+msgid "Reveal cards from your deck until you reveal 2 Treasure cards. Put those Treasure cards into your hand and discard the other revealed cards."
+msgstr "Decke solange Karten vom Nachziehstapel auf, bis 2 Geldkarten offen liegen. Nimm die Geldkarten auf die Hand, lege die übrigen aufgedeckten Karten ab."
+
+#: ../../.././cards/base.py:268
+msgid "Bureaucrat"
+msgstr "Bürokrat"
+
+#: ../../.././cards/base.py:271
+msgid "Gain a Silver card; put it on top of your deck. Each other player reveals a Victory card from his hand and puts it on his deck (or reveals a hand with no Victory cards)."
+msgstr "Nimm dir ein Silber und lege es verdeckt auf deinen Nachziehstapel. Jeder Mitspieler deckt eine Punktekarte aus seiner Hand auf und legt sie verdeckt auf seinen Nachziehstapel. Hat ein Spieler keine Punktekarte auf der Hand, muss er seine Kartenhand vorzeigen."
+
+#: ../../.././cards/base.py:289
+msgid "Select a Victory card you want to reveal"
+msgstr "Wähle die Punktekarte aus, die du aufdecken möchtest!"
+
+#: ../../.././cards/base.py:293
+#, python-format
+msgid "%s reveals a card:"
+msgstr "%s deckt eine Karte auf:"
+
+#: ../../.././cards/base.py:296
+#: ../../.././cards/seaside.py:169
+#: ../../.././cards/intrigue.py:414
+#, python-format
+msgid "%s reveals his hand:"
+msgstr "%s deckt seine Hand auf:"
+
+#: ../../.././cards/base.py:299
+msgid "Chancellor"
+msgstr "Kanzler"
+
+#: ../../.././cards/base.py:302
+msgid "+2 Money, You may immediately put your deck into your discard pile."
+msgstr "+2 Geld. Lege sofort deinen kompletten Nachziehstapel ab."
+
+#: ../../.././cards/base.py:306
+msgid "Do you want to put your deck into your discard pile?"
+msgstr "Möchtest du deinen Nachziehstapel ablegen?"
+
+#: ../../.././cards/base.py:312
+msgid "Council Room"
+msgstr "Ratsversammlung"
+
+#: ../../.././cards/base.py:315
+msgid "+4 cards, +1 buy, Each other player draws a card."
+msgstr "+4 Karten, +1 Kauf. Jeder Mitspieler zieht sofort eine Karte nach."
+
+#: ../../.././cards/base.py:324
+msgid "Feast"
+msgstr "Festmahl"
+
+#: ../../.././cards/base.py:329
+msgid "Trash this card, gain a card costing up to 5."
+msgstr "Entsorge diese Karte. Nimm dir eine Karte, die bis zu 5 Geld kostet."
+
+#: ../../.././cards/base.py:345
+msgid "Festival"
+msgstr "Jahrmarkt"
+
+#: ../../.././cards/base.py:348
+msgid "+2 Actions, +1 Buy, +2 Money"
+msgstr "+2 Aktionen, +1 Kauf, +2 Geld."
+
+#: ../../.././cards/base.py:356
+msgid "Laboratory"
+msgstr "Laboratorium"
+
+#: ../../.././cards/base.py:359
+msgid "+2 Cards, +1 Action"
+msgstr "+2 Karten, +1 Aktion."
+
+#: ../../.././cards/base.py:366
+msgid "Library"
+msgstr "Bibliothek"
+
+#: ../../.././cards/base.py:369
+msgid "Draw until you have 7 cards in your hand. You may set aside any action cards drawn this way, as you draw them; discard the set aside cards after you finish drawing."
+msgstr "Ziehe solange Karten nach, bis du 7 Karten auf der Hand hast. Aktionskarten kannst du zur Seite legen, sobald du sie ziehst. Die zur Seite gelegten Karten werden am Ende der Aktion abgelegt."
+
+#: ../../.././cards/base.py:379
+#, python-format
+msgid "Do you want to set aside the card '%s'?"
+msgstr "Möchtest du die Karte „%s“ zur Seite legen?"
+
+#: ../../.././cards/base.py:386
+msgid "Moneylender"
+msgstr "Geldverleiher"
+
+#: ../../.././cards/base.py:389
+msgid "Trash a Copper card from your hand. If you do, +3 Money."
+msgstr "Entsorge ein Kupfer aus deiner Hand. Wenn du das machst, +3 Geld."
+
+#: ../../.././cards/base.py:402
+msgid "Spy"
+msgstr "Spion"
+
+#: ../../.././cards/base.py:405
+msgid "+1 Card, +1 Action, Each player (including you) reveals the top card of his deck and either discards it or puts it back, your choice."
+msgstr "+1 Karte, +1 Aktion. Jeder Spieler (auch du selbst) deckt die oberste Karte von seinem Nachziehstapel auf. Du entscheidest, ob er sie ablegt oder zurück auf seinen Nachziehstapel legt."
+
+#: ../../.././cards/base.py:435
+msgid "Thief"
+msgstr "Dieb"
+
+#: ../../.././cards/base.py:438
+msgid "Each other player reveals the top 2 cards of his deck. If they revealed any Treasure cards, they trash one of them that you choose. You may gain any or all of these trashed cards. They discard the other revealed cards."
+msgstr "Jeder Mitspieler deckt die obersten beiden Karten von seinem Nachziehstapel auf. Haben die Mitspieler eine oder mehrere Geldkarten aufgedeckt, muss jeder eine davon (nach deiner Wahl) entsorgen. Du kannst eine beliebige Zahl der entsorgten Karten bei dir ablegen. Die übrigen aufgedeckten Karten legen die Spieler bei sich ab."
+
+#: ../../.././cards/base.py:455
+#, python-format
+msgid "%s reveals the top 2 cards of his deck:"
+msgstr "%s deckt die obersten 2 Karten seines Nachziehstapels auf:"
+
+#: ../../.././cards/base.py:461
+#, python-format
+msgid "Which card of the player %s do you want to trash?"
+msgstr "Welche Karte von %s möchtest du entsorgen?"
+
+#: ../../.././cards/base.py:472
+#, python-format
+msgid "Do you want to have the card '%s'?"
+msgstr "Möchtest du die Karte „%s“ haben?"
+
+#: ../../.././cards/base.py:475
+#, python-format
+msgid "%s picks up this card from trash:"
+msgstr "%s nimmt die entsorgte Karte:"
+
+#: ../../.././cards/base.py:481
+msgid "Throne Room"
+msgstr "Thronsaal"
+
+#: ../../.././cards/base.py:484
+msgid "Choose an action card in your hand. Play it twice."
+msgstr "Wähle eine Aktionskarte aus deiner Hand. Spiele diese Aktionskarte zweimal aus."
+
+#: ../../.././cards/base.py:490
+#, python-format
+msgid "Which action card do you want to play on the throne room? (%i actions left)"
+msgstr "Welche Aktionskarte möchtest du im Thronsaal ausspielen? (Noch %i Aktionen übrig.)"
+
+#: ../../.././cards/base.py:508
+msgid "Witch"
+msgstr "Hexe"
+
+#: ../../.././cards/base.py:511
+msgid "+2 Cards, Each other player gains a Curse card."
+msgstr "+2 Karten. Jeder Mitspieler muss sich eine Fluchkarte nehmen."
+
+#: ../../.././cards/base.py:529
+msgid "Woodcutter"
+msgstr "Holzfäller"
+
+#: ../../.././cards/base.py:532
+msgid "+1 Buy, +2 Money"
+msgstr "+1 Kauf, +2 Geld."
+
+#: ../../.././cards/base.py:539
+msgid "Workshop"
+msgstr "Werkstatt"
+
+#: ../../.././cards/base.py:542
+msgid "Gain a card costing up to 4."
+msgstr "Nimm dir eine Karte, die bis zu 4 Geld kostet."
+
+#: ../../.././cards/base.py:559
+msgid "First Game"
+msgstr "Erstes Spiel"
+
+#: ../../.././cards/base.py:562
+msgid "Big Money"
+msgstr "Großes Geld"
+
+#: ../../.././cards/base.py:565
+msgid "Interaction"
+msgstr "Interaktion"
+
+#: ../../.././cards/base.py:568
+msgid "Size Distortion"
+msgstr "Größenverzerrung"
+
+#: ../../.././cards/base.py:571
+msgid "Village Square"
+msgstr "Dorfplatz"
+
+#: ../../.././cards/seaside.py:11
+msgid "Lookout"
+msgstr "Ausguck"
+
+#: ../../.././cards/seaside.py:15
+msgid "+1 Action. Look at the top 3 Cards of your deck. Trash one of them. Discard one of them. Put the other one on top of your deck."
+msgstr "+1 Aktion. Sieh dir die obersten 3 Karten von deinem Nachziehstapel an. Entsorge eine davon. Lege eine davon ab. Lege eine davon verdeckt zurück auf deinen Nachziehstapel."
+
+#: ../../.././cards/seaside.py:22
+msgid "Merchant Ship"
+msgstr "Handelsschiff"
+
+#: ../../.././cards/seaside.py:26
+msgid "Now and at the start of next turn: +2 Money"
+msgstr "+2 Geld. Bei Beginn deines nächsten Zuges: +2 Geld."
+
+#: ../../.././cards/seaside.py:33
+msgid "Navigator"
+msgstr "Navigator"
+
+#: ../../.././cards/seaside.py:37
+msgid "+2 Money. Look at the top 5 Cards of your deck. Either discard all of them, or put them back on top of your deck in any order."
+msgstr "+2 Geld. Sieh dir die obersten 5 Karten von deinem Nachziehstapel an. Lege entweder all diese Karten ab oder lege sie in beliebiger Reihenfolge verdeckt zurück auf deinen Nachziehstapel."
+
+#: ../../.././cards/seaside.py:44
+msgid "Pirate Ship"
+msgstr "Piratenschiff"
+
+#: ../../.././cards/seaside.py:48
+msgid "Choose one: Each Player reveals the top 2 cards of his deck, trashes a revealed Treasure that you choose, discards the rest, and if anyone trashed a Treasure you take a Coin token; or + 1 Money per Coin token you have taken with pirate Ships this game."
+msgstr "Wähle eins: Jeder Mitspieler muss die obersten beiden Karten von seinem Nachziehstapel aufdecken. Haben die Mitspieler eine oder mehrere Geldkarten aufgedeckt, muss jeder eine davon (nach deiner Wahl) entsorgen. Wenn auf diese Weise mindestens 1 Geldkarte entsorgt wird, erhältst du 1 Geldmarker auf dein Tableau Piratenschiff. Die übrigen aufgedeckten Karten legen die Spieler bei sich ab; oder: +1 Geld für jeden Geldmarker auf deinem Tableau Piratenschiff."
+
+#: ../../.././cards/seaside.py:54
+msgid "Outpost"
+msgstr "Außenposten"
+
+#: ../../.././cards/seaside.py:58
+msgid "You only draw 3 cards (instead of 5) in this turns Clean-up phase. Take an extra turn after this one. This can't cause you to take more than two consecutive turns."
+msgstr "Ziehe in der folgenden Aufräumphase nur 3 Karten nach. Führe danach sofort einen weiteren Zug aus. Du kannst auf diese Weise nur einen weiteren Zug ausführen."
+
+#: ../../.././cards/seaside.py:67
+msgid "Pearl Diver"
+msgstr "Perlentaucher"
+
+#: ../../.././cards/seaside.py:71
+msgid "+1 Card, +1 Action. Look at the bottom card of your deck. You may put it on top."
+msgstr "+1 Karte, +1 Aktion. Sieh dir die unterste Karte von deinem Nachziehstapel an. Du darfst diese Karte verdeckt auf deinen Nachziehstapel legen."
+
+#: ../../.././cards/seaside.py:79
+msgid "Salvager"
+msgstr "Müllverwerter"
+
+#: ../../.././cards/seaside.py:82
+msgid "+1 Buy. Trash a Card from your hand. +Money equal to its costs."
+msgstr "+1 Kauf. Entsorge eine Karte aus deiner Hand. +X Geld entsprechend den Kosten der entsorgten Karte."
+
+#: ../../.././cards/seaside.py:101
+msgid "Sea Hag"
+msgstr "Seehexe"
+
+#: ../../.././cards/seaside.py:105
+msgid "Each other player discards the top card of his deck, then gains a Curse card, putting it on top of his deck."
+msgstr "Jeder Mitspieler muss die oberste Karte seines Nachziehstapels ablegen und sich dann einen Fluch nehmen, den er verdeckt auf seinen Nachziehstapel legt."
+
+#: ../../.././cards/seaside.py:111
+msgid "Smugglers"
+msgstr "Schmuggler"
+
+#: ../../.././cards/seaside.py:115
+msgid "Gain a copy of a Card costing up to 6 that the player to your rigth gained on his last turn."
+msgstr "Nimm dir eine Karte, die der Spieler rechts von dir in seinem letzten Zug genommen oder gekauft hat und die bis zu 6 Geld kostet."
+
+#: ../../.././cards/seaside.py:121
+msgid "Caravan"
+msgstr "Karawane"
+
+#: ../../.././cards/seaside.py:125
+msgid "+1 Card, +1 Action. At the start of your next turn, +1 Card."
+msgstr "+1 Karte, +1 Aktion. Bei Beginn deines nächsten Zuges: +1 Karte."
+
+#: ../../.././cards/seaside.py:133
+msgid "Bazaar"
+msgstr "Bazar"
+
+#: ../../.././cards/seaside.py:136
+msgid "+1 Card, +2 Actions, +1 Money"
+msgstr "+1 Karte, +2 Aktionen, +1 Geld."
+
+#: ../../.././cards/seaside.py:144
+msgid "Cutpurse"
+msgstr "Beutelschneider"
+
+#: ../../.././cards/seaside.py:147
+msgid "+2 Money. Each other player discards a Copper card (or reveals a hand with no Copper)."
+msgstr "+2 Geld. Jeder Mitspieler muss ein Kupfer aus seiner Hand ablegen. Hat ein Spieler kein Kupfer auf der Hand, muss er seine Kartenhand vorzeigen."
+
+#: ../../.././cards/seaside.py:160
+#, python-format
+msgid "%s played Cutpurse. Which Copper do you want to discard?"
+msgstr "%s hat „Beutelschneider“ gespielt. Welches Kupfer möchtest du ablegen?"
+
+#: ../../.././cards/seaside.py:174
+msgid "Embargo"
+msgstr ""
+
+#: ../../.././cards/seaside.py:178
+msgid "+2 Money. Trash this card. Put an Embargo token on top of a Supply pile. When a player buys a card, he gains a Curse card per Embargo token on that pile."
+msgstr ""
+
+#: ../../.././cards/seaside.py:185
+msgid "Lighthouse"
+msgstr "Leuchtturm"
+
+#: ../../.././cards/seaside.py:189
+msgid "+1 Action. Now and at the start of your next turn: +1 Money. While this is in play, when another player plays an Attack card it doesn't affect you."
+msgstr "+1 Aktion, +1 Geld. Bei Beginn deines nächsten Zuges: +1 Geld. Solange diese Karte im Spiel ist, bist du von Angriffen deiner Mitspieler nicht betroffen."
+
+#: ../../.././cards/seaside.py:196
+msgid "Ghost Ship"
+msgstr "Geisterschiff"
+
+#: ../../.././cards/seaside.py:199
+msgid "+2 Cards. Each other player with 4 or more cards in hand puts cards from his hand on top of his deck until he has 3 cards in his hand."
+msgstr "+2 Karten. Jeder Mitspieler, der mindestens 4  Karten auf der Hand hat, muss solange Karten aus seiner Hand verdeckt auf seinen Nachziehstapel legen, bis er nur noch 3 Karten auf der Hand hat."
+
+#: ../../.././cards/seaside.py:212
+#, python-format
+msgid "%s played Ghost Ship. Which cards do you want to put on the top of your deck?"
+msgstr "%s hat „Geisterschiff“ gespielt. Welche Karten möchtest du auf deinen Nachziehstapel legen?"
+
+#: ../../.././cards/seaside.py:218
+msgid "Haven"
+msgstr "Hafen"
+
+#: ../../.././cards/seaside.py:222
+msgid "+1 Card, + 1 Action. Set aside a card from your hand face down. At the start of your next turn, put it into your hand."
+msgstr "+1 Karte, +1 Aktion. Lege eine Karte aus deiner Hand verdeckt zur Seite. Bei Beginn deines nächsten Zuges: Nimm die zur Seite gelegte Karte auf die Hand."
+
+#: ../../.././cards/seaside.py:230
+msgid "Explorer"
+msgstr "Entdecker"
+
+#: ../../.././cards/seaside.py:234
+msgid "You may reveal a Province card from your hand. If you do, gain a Gold card, putting it into your hand. Otherwise, gain a Silver card, putting it into your hand."
+msgstr "Du darfst eine Provinz aus deiner Hand aufdecken. Wenn du das machst: Nimm dir ein Gold auf die Hand. Ansonsten: Nimm dir ein Silber auf die Hand."
+
+#: ../../.././cards/seaside.py:240
+msgid "Fishing Village"
+msgstr "Fischerdorf"
+
+#: ../../.././cards/seaside.py:244
+msgid "+2 Actions, +1 Money. At the start of your next turn: +1 Action, +1 Money."
+msgstr "+2 Aktionen, +1 Geld. Bei Beginn deines nächsten Zuges: +1 Aktion, +1 Geld."
+
+#: ../../.././cards/seaside.py:252
+msgid "Warehouse"
+msgstr "Lagerhaus"
+
+#: ../../.././cards/seaside.py:255
+msgid "+3 Cards, +1 Actions. Discard 3 Cards."
+msgstr "+3 Karten, +1 Aktion. Lege 3 Karten aus deiner Hand ab."
+
+#: ../../.././cards/seaside.py:261
+msgid "Which 3 cards do you want to discard?"
+msgstr "Welche 3 Karten möchtest du ablegen?"
+
+#: ../../.././cards/seaside.py:272
+msgid "Treasury"
+msgstr "Schatzkammer"
+
+#: ../../.././cards/seaside.py:276
+msgid "+1 Card, +1 Action, +1 Money. When you discard this from play, if you didn't buy a Victory card this turn, you may put this on top of your deck."
+msgstr "+1 Karte, +1 Aktion, +1 Geld. Wenn du in diesem Zug keine Punktekarte gekauft hast und diese Karte im Spiel ist, darfst du diese Karte verdeckt auf deinen Nachziehstapel legen, anstatt sie abzulegen."
+
+#: ../../.././cards/seaside.py:285
+msgid "Island"
+msgstr "Insel"
+
+#: ../../.././cards/seaside.py:290
+msgid "Set aside this and another card from your hand. Return them to your deck at the end of the game."
+msgstr "Lege diese Karte und eine andere Karte aus deiner Hand offen zur Seite auf dein Tableau Insel. Nimm die Karten am Ende des Spiels zurück in deinen Kartenstapel. Wert: 2 Punkte."
+
+#: ../../.././cards/seaside.py:297
+msgid "Ambassador"
+msgstr "Botschafter"
+
+#: ../../.././cards/seaside.py:301
+msgid "Reveal a card from your hand. Return 2 copies of it from your hand to the Supply. Then each other player gains a copy of it."
+msgstr "Decke eine Karte aus deiner Hand auf. Lege bis zu 2 dieser Karten aus deiner Hand zurück in den Vorrat. Jeder Mitspieler muss sich eine solche Karte vom Vorrat nehmen."
+
+#: ../../.././cards/seaside.py:307
+msgid "Tactician"
+msgstr "Taktiker"
+
+#: ../../.././cards/seaside.py:311
+msgid "Discard your hand. If you discarded any cards this way, then at the start of your next turn, +5 Cards, +1 Buy, and +1 Action"
+msgstr "Lege deine übrigen Handkarten ab. Wenn du auf diese Weise mindestens eine Karte abgelegt hast: Bei Beginn deines nächsten Zuges: +5 Karten, +1 Aktion, +1 Kauf."
+
+#: ../../.././cards/seaside.py:317
+msgid "Native Village"
+msgstr "Eingeborenendorf"
+
+#: ../../.././cards/seaside.py:321
+msgid "+2 Actions. Choose one: Set aside the top card of your deck face down on your Native Village mat; or put all cards from your mat into your hand. You may look at the cards on your mat at any time; return them to your deck at the end of the game."
+msgstr "+2 Aktionen. Wähle eins: Lege die oberste Karte von deinem Nachziehstapel verdeckt zur Seite auf dein Tableau Eingeborenendorf; oder nimm alle Karten von deinem Tableau Eingeborenendorf auf die Hand."
+
+#: ../../.././cards/seaside.py:328
+msgid "Wharf"
+msgstr "Werft"
+
+#: ../../.././cards/seaside.py:332
+msgid "Now and at the start of your next turn: +2 Cards, +1 Buy."
+msgstr "+2 Karten, +1 Kauf. Bei Beginn deines nächsten Zuges: +2 Karten, +1 Kauf."
+
+#: ../../.././cards/seaside.py:340
+msgid "Treasure Map"
+msgstr "Schatzkarte"
+
+#: ../../.././cards/seaside.py:344
+msgid "Trash this and another copy of Treasure map from your hand. If you do trash two Treasure maps, gain 4 Gold cards, putting them on top of your deck."
+msgstr "Entsorge diese und eine weitere Schatzkarte aus deiner Hand. Wenn du das machst: Nimm dir 4 Gold und lege diese verdeckt auf deinen Nachziehstapel."
+
+#: ../../.././cards/seaside.py:359
+#, python-format
+msgid "%s gains on top of his deck:"
+msgstr "%s erhält auf seinem Nachziehstapel:"
+
+#: ../../.././cards/intrigue.py:11
+msgid "Baron"
+msgstr "Baron"
+
+#: ../../.././cards/intrigue.py:14
+msgid "+1 Buy, You may discard an Estate card. If you do, +4 Money. Otherwise gain an Estate card."
+msgstr "Du darfst ein Anwesen ablegen. Wenn du das machst: +4 Geld. Ansonsten: Nimm ein Anwesen."
+
+#: ../../.././cards/intrigue.py:26
+#, python-format
+msgid "%s discards:"
+msgstr "%s legt ab:"
+
+#: ../../.././cards/intrigue.py:37
+msgid "Bridge"
+msgstr "Brücke"
+
+#: ../../.././cards/intrigue.py:40
+msgid "+1 Buy, +1 Money, All cards (including cards in players' hands) cost 1 Money less this turn, but not less than 0 Money."
+msgstr "+1 Kauf, +1 Geld. Alle Karten (auch die Karten, die die Spieler auf der Hand halten), kosten in diesem Zug 1 Geld weniger, niemals jedoch weniger als 0 Geld."
+
+#: ../../.././cards/intrigue.py:59
+msgid "Conspirator"
+msgstr "Verschwörer"
+
+#: ../../.././cards/intrigue.py:62
+msgid "+2 Money, If you've played 3 or more Actions this turn (counting this): +1 Card, +1 Action"
+msgstr "+2 Geld. Wenn du in diesem Zug 3 oder mehr Aktionskarten ausgespielt hast (diese eingeschlossen): +1 Karte, +1 Aktion."
+
+#: ../../.././cards/intrigue.py:73
+msgid "Coppersmith"
+msgstr "Kupferschmied"
+
+#: ../../.././cards/intrigue.py:76
+msgid "Copper produces an extra 1 Money this turn."
+msgstr "Kupfer produziert in diesem Zug 1 Geld mehr."
+
+#: ../../.././cards/intrigue.py:87
+msgid "Courtyard"
+msgstr "Burghof"
+
+#: ../../.././cards/intrigue.py:90
+msgid "+3 Cards, put a card from your hand on top of your deck."
+msgstr "+3 Karten. Lege eine Karte aus deiner Hand verdeckt auf deinen Nachziehstapel."
+
+#: ../../.././cards/intrigue.py:95
+msgid "Select a card to put on your deck."
+msgstr "Wähle die Karte aus, die du auf deinen Nachziehstapel legen willst."
+
+#: ../../.././cards/intrigue.py:103
+msgid "Duke"
+msgstr "Herzog"
+
+#: ../../.././cards/intrigue.py:108
+msgid "Worth one point for every duchy you have."
+msgstr "Wert 1 Punkt pro Herzogtum im eigenen Kartensatz."
+
+#: ../../.././cards/intrigue.py:115
+msgid "Great Hall"
+msgstr "Große Halle"
+
+#: ../../.././cards/intrigue.py:119
+msgid "+1 Card, +1 Action"
+msgstr "+1 Karte, +1 Aktion."
+
+#: ../../.././cards/intrigue.py:127
+msgid "Harem"
+msgstr "Harem"
+
+#: ../../.././cards/intrigue.py:136
+msgid "Ironworks"
+msgstr "Eisenhütte"
+
+#: ../../.././cards/intrigue.py:139
+msgid "Gain a card costing up to 4. If it is an Action card: +1 Action; Treasure card: +1 Money; Victory Card: +1 Card"
+msgstr "Nimm dir eine Karte, die bis zu 4 Geld kostet. Ist es eine Aktionskarte, +1 Aktion. Ist es eine Geldkarte, +1 Geld. Ist es eine Punktekarte, +1 Karte."
+
+#: ../../.././cards/intrigue.py:165
+msgid "Masquerade"
+msgstr "Maskerade"
+
+#: ../../.././cards/intrigue.py:168
+msgid "+2 Cards, Each player passes a card from his hand to the left at once. Then you may trash a card from your hand."
+msgstr "+2 Karten. Alle Spieler (auch du selbst) müssen gleichzeitig eine Karte aus ihrer Hand an ihren linken Nachbarn weiter geben. Danach darfst du eine Karte aus deiner Hand entsorgen."
+
+#: ../../.././cards/intrigue.py:177
+msgid "Which card do you want to pass left?"
+msgstr "Welche Karte möchtest du nach links weitergeben?"
+
+#: ../../.././cards/intrigue.py:184
+msgid "You gained this card from your right:"
+msgstr "Du hast diese Karte von deiner Rechten erhalten:"
+
+#: ../../.././cards/intrigue.py:200
+msgid "Mining Village"
+msgstr "Bergwerk"
+
+#: ../../.././cards/intrigue.py:203
+msgid "+1 Card, +2 Actions, You may trash this card immediately. If you do, +2 Money."
+msgstr "+1 Karte, +2 Aktionen. Du darfst diese Karte sofort entsorgen. Wenn du das machst: +2 Geld."
+
+#: ../../.././cards/intrigue.py:211
+msgid "Do you want to trash your Mining Village?"
+msgstr "Möchtest du dein Bergwerk entsorgen?"
+
+#: ../../.././cards/intrigue.py:217
+msgid "Minion"
+msgstr "Lakai"
+
+#: ../../.././cards/intrigue.py:220
+msgid "+1 Action, Choose one: +2 Money, or discard your hand, +4 Cards, and each other player with at least 5 cards in hand discards his hand and draws 4 cards."
+msgstr "+1 Aktion. Wähle eins: +2 Geld; oder lege alle deine Handkarten ab: +4 Karten. Jeder Mitspieler, der mindestens 5 Karten auf der Hand hat, muss alle seine Handkarten ablegen und 4 Karten nachziehen."
+
+#: ../../.././cards/intrigue.py:226
+#: ../../.././cards/intrigue.py:468
+msgid "+2 Money"
+msgstr "+2 Geld"
+
+#: ../../.././cards/intrigue.py:227
+msgid "Discard hand and draw 4 cards, attack other players"
+msgstr "Hand ablegen und 4 Karten ziehen, andere Spieler angreifen"
+
+#: ../../.././cards/intrigue.py:229
+#: ../../.././cards/intrigue.py:471
+msgid "What do you want to do?"
+msgstr "Was möchtest du tun?"
+
+#: ../../.././cards/intrigue.py:234
+#: ../../.././cards/intrigue.py:286
+#: ../../.././cards/intrigue.py:315
+#: ../../.././cards/intrigue.py:476
+#, python-format
+msgid "%(player)s chooses '%(action)s'"
+msgstr "%(player)s wählt „%(action)s“"
+
+#: ../../.././cards/intrigue.py:246
+#: ../../.././cards/intrigue.py:266
+#, python-format
+msgid "%s discards this hand and draws 4 cards:"
+msgstr "%s legt seine Hand ab und zieht 4 Karten:"
+
+#: ../../.././cards/intrigue.py:262
+msgid "You discard your hand and draw 4 cards."
+msgstr "Du legst deine Hand ab und ziehst 4 Karten."
+
+#: ../../.././cards/intrigue.py:271
+msgid "Nobles"
+msgstr "Adelige"
+
+#: ../../.././cards/intrigue.py:275
+msgid "Choose one: +3 Cards, or +2 Actions."
+msgstr "Wähle eins: +3 Karten; oder +2 Aktionen."
+
+#: ../../.././cards/intrigue.py:279
+msgid "+2 Actions"
+msgstr "+2 Aktionen"
+
+#: ../../.././cards/intrigue.py:281
+msgid "What do you want to get?"
+msgstr "Was möchtest du haben?"
+
+#: ../../.././cards/intrigue.py:295
+msgid "Pawn"
+msgstr "Handlanger"
+
+#: ../../.././cards/intrigue.py:298
+msgid "Choose two: +1 Card, +1 Action, +1 Buy, +1 Money. (The choices must be different.)"
+msgstr "Wähle zwei verschiedene: +1 Karte, +1 Aktion, +1 Kauf, +1 Geld."
+
+#: ../../.././cards/intrigue.py:302
+msgid "+1 Card"
+msgstr "+1 Karte."
+
+#: ../../.././cards/intrigue.py:303
+msgid "+1 Action"
+msgstr "+1 Aktion."
+
+#: ../../.././cards/intrigue.py:304
+msgid "+1 Buy"
+msgstr "+1 Kauf."
+
+#: ../../.././cards/intrigue.py:305
+msgid "+1 Money"
+msgstr "+1 Geld."
+
+#: ../../.././cards/intrigue.py:307
+msgid "Choose two:"
+msgstr "Wähle zwei:"
+
+#: ../../.././cards/intrigue.py:330
+msgid "Saboteur"
+msgstr "Saboteur"
+
+#: ../../.././cards/intrigue.py:333
+msgid "Each other player reveals cards from the top of his deck until revealing one costing 3 or more. He trashes that card and may gain a card costing at most 2 less than it. He discards the other revealed cards."
+msgstr "Jeder Mitspieler muss solange Karten von seinem Nachziehstapel aufdecken, bis er eine Karte aufdeckt, die 3 Geld oder mehr kostet. Er muss diese Karte entsorgen und darf sich eine Karte nehmen, die mindestens 2 weniger kostet. Die übrigens aufgedeckten Karten legt er ab."
+
+#: ../../.././cards/intrigue.py:340
+msgid "Scout"
+msgstr "Späher"
+
+#: ../../.././cards/intrigue.py:343
+msgid "+1 Action, Reveal the top 4 cards of your deck. Put the revealed Victory cards into your hand. Put the other cards on top of your deck in any order."
+msgstr "+1 Aktion. Decke die obersten 4 Karten von deinem Nachziehstapel auf. Nimm alle aufgedeckten Punktekarten auf die Hand. Lege die übrigen Karten in beliebiger Reihenfolge verdeckt zurück auf deinen Nachziehstapel."
+
+#: ../../.././cards/intrigue.py:353
+#, python-format
+msgid "%s reveals the top 4 cards of his deck:"
+msgstr "%s deckt die obersten 4 Karten seines Nachziehstapels auf:"
+
+#: ../../.././cards/intrigue.py:361
+msgid "Which card do you want to put onto the deck next?"
+msgstr "Welche Karte möchtest du als nächstes auf den Nachziehstapel legen?"
+
+#: ../../.././cards/intrigue.py:369
+msgid "Secret Chamber"
+msgstr "Geheimkammer"
+
+#: ../../.././cards/intrigue.py:372
+msgid "Discard any number of cards. +1 Money per card discarded.  When another player plays an attack card, you may reveal this from your hand. If you do, +2 Cards, then put 2 cards from your hand on top of your deck."
+msgstr "Lege eine beliebige Anzahl Karten aus deiner Hand ab: +1 Geld für jede abgelegte Karte. Wenn ein Mitspieler eine Angriffskarte ausspielt, darfst du diese Karte aus deiner Hand aufdecken. Wenn du das machst: +2 Karten, dann lege 2 Karten aus deiner Hand verdeckt auf deinen Nachziehstapel."
+
+#: ../../.././cards/intrigue.py:395
+msgid "Which cards do you want to put on your deck?"
+msgstr "Welche Karten möchtest du auf deinen Nachziehstapel legen?"
+
+#: ../../.././cards/intrigue.py:404
+msgid "Shanty Town"
+msgstr "Armenviertel"
+
+#: ../../.././cards/intrigue.py:407
+msgid "+2 Actions, Reveal your hand. If you have no action cards in hand, +2 Cards."
+msgstr "+2 Aktionen. "
+
+#: ../../.././cards/intrigue.py:423
+msgid "Swindler"
+msgstr "Trickser"
+
+#: ../../.././cards/intrigue.py:426
+msgid "+2 Money, Each other player trashes the top card of his deck and gains a card with the same cost that you choose."
+msgstr "+2 Geld. Jeder Mitspieler muss die oberste Karte seine Nachziehstapels entsorgen. Du wählst eine Karte, die das gleiche kostet, wie die entsorgte Karte. Diese Karte muss sich der Spieler nehmen."
+
+#: ../../.././cards/intrigue.py:446
+msgid "Select a card that you want to give."
+msgstr "Wähle die Karte aus, die du abgeben möchtest."
+
+#: ../../.././cards/intrigue.py:461
+msgid "Steward"
+msgstr "Verwalter"
+
+#: ../../.././cards/intrigue.py:464
+msgid "Choose one: +2 Cards; or +2 Money; or trash two cards from your hand."
+msgstr "Wähle eins: +2 Karten; oder +2 Geld; oder entsorge genau 2 Karten aus deiner Hand."
+
+#: ../../.././cards/intrigue.py:467
+msgid "+2 Cards"
+msgstr "+2 Karten"
+
+#: ../../.././cards/intrigue.py:469
+msgid "Trash two cards"
+msgstr "Entsorge zwei Karten"
+
+#: ../../.././cards/intrigue.py:498
+msgid "Torturer"
+msgstr ""
+
+#: ../../.././cards/intrigue.py:502
+msgid "+3 Cards, Each other player chooses one: he discards 2 cards; or he gains a Curse card, putting it in his hand."
+msgstr ""
+
+#: ../../.././cards/intrigue.py:506
+msgid "Trading Post"
+msgstr "Handelsposten"
+
+#: ../../.././cards/intrigue.py:510
+msgid "Trash 2 cards from your hand. If you do, gain a Silver card; put it into your hand."
+msgstr "Entsorge 2 Karten aus deiner Hand. Wenn du das machst: Nimm dir ein Silber auf die Hand."
+
+#: ../../.././cards/intrigue.py:514
+msgid "Tribute"
+msgstr "Tribut"
+
+#: ../../.././cards/intrigue.py:518
+msgid "The player to your left reveals then discards the top 2 cards of his deck. For each differently named card revealed, if it is an Action Card: +2 Actions. If it is a Treasure Card: +2 Money. If it is a Victory Card: +2 Cards."
+msgstr "Dein linker Nachbar muss die obersten beiden Karten von seinem Nachziehstapel aufdecken und diese ablegen. Für jede Karte mit unterschiedlichem Namen erhältst du etwas: Bei einer Aktionskarte: +2 Aktionen. Bei einer Geldkarte: +2 Geld. Bei einer Punktekarte: +2 Karten."
+
+#: ../../.././cards/intrigue.py:525
+msgid "Upgrade"
+msgstr ""
+
+#: ../../.././cards/intrigue.py:529
+msgid "+1 Card, +1 Action, Trash a card from your hand. Gain a card costing exactly 1 more than it."
+msgstr ""
+
+#: ../../.././cards/intrigue.py:533
+msgid "Wishing Well"
+msgstr "Wunschbrunnen"
+
+#: ../../.././cards/intrigue.py:536
+msgid "+1 Card, +1 Action, Name a card. Reveal the top card of your deck. If it's the named card, put it into your hand."
+msgstr "+1 Karte, +1 Aktion. Benenne eine Karte. Decke die oberste Karte von deinem Nachziehstapel auf. Wenn es die benannte Karte ist, nimm sie auf die Hand."
+
+#: ../../.././cards/intrigue.py:545
+msgid "Name a card."
+msgstr "Benenne eine Karte."
+
+#: ../../.././cards/intrigue.py:548
+#, python-format
+msgid "%s names:"
+msgstr "%s benennt:"
+
+#: ../../.././cards/intrigue.py:566
+msgid "Victory Dance"
+msgstr "Siegestanz"
+
+#: ../../.././cards/intrigue.py:569
+msgid "Secret Schemes"
+msgstr "Geheime Pläne"
+
+#: ../../.././cards/intrigue.py:572
+msgid "Best Wishes"
+msgstr "Alles Gute"
+
+#: ../../.././cards/intrigue.py:575
+msgid "Deconstruction"
+msgstr "Rückbau"
+
+#: ../../.././cards/intrigue.py:578
+msgid "Hand Madness"
+msgstr "Manueller Wahnsinn"
+
+#: ../../.././cards/intrigue.py:581
+msgid "Underlings"
+msgstr "Untergebene"
+

domination/templates/create_game.html

       {% endfor %}
 
     <p>Which 10 cards? You selected <span id="noofcards"></span>.</p>
-      {% for edition, cards in app.card_classes | groupby("edition") %}
+      {% for edition, cards in app.card_classes() | groupby("edition") %}
         <h3>{{ edition.name }}<span class="edition-{{ edition.key }}"></span></h3>
         {% for cls in cards %}
           {% call macros.render_card(cls) %}

domination/tools.py

-_ = lambda x: x
+from flask import request
+import gettext 
+
+class Translatable:
+
+	def __init__(self, string, parameters = []):
+		self.string = string;
+		self.parameters = parameters;
+
+	def __str__(self):
+		return request.translation.lgettext(self.string % self.parameters).decode("UTF-8")
+
+def _(string, parameters = []):
+	return Translatable(string, parameters)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.