Is having to pass Context to most classes a sign of bad design?
This is the Service locator pattern - you pass around a service locator (often called "Context") and get the required dependencies from it. It is not an anti-pattern, and is not that much of a bad design, but usually dependency injection is considered superior.
What you are doing is - passing the service locator even further down the object graph. What is advisable is to give each class only the dependencies it needs. So instead of passing Context
in the constructor, you pass all the strings it requires. That way you won't be violating the Law of Demeter
This is one of the rare occasions where a globally accessible singleton class may be better than passing the Context
to every single class.
I would consider creating a singleton for localization, then use the Context
inside of there (unless you need other aspects of the Context
all over the place).
Of course, this is a matter of taste and preference. YMMV