Extension methods for translation engine
This is a horrible misuse of extension methods.  The only thing worse (and I'm sure you'll see it) is (n+5).Translate(...).  You're absolutely correct - the starting point for the mistake is in thinking of the integer as the base object for the translation.  There are a number of well-understood patterns for handling localization, and this isn't any of them.  Since we're talking C#, there's the obvious resource technique, but there are others as well.  The GNU Project pioneered the _("blah blah blah") mechanism, where the default string serves as a key in a locale-specific table of replacements (along with the Windows OS and MS Office, this is one of the most prevalent and successful translation systems).  And then there's the tried-and-true dictionary-indexed-by-a-named-constant (often an enum member), often encapsulated behind a Language class with a Translate(...) method.