エラーメッセージの書き方に悩んでいます。

よくある小さなサンプルプログラムでは、エラー処理の箇所に直接文字列リテラルを書きこんでありますが、
大きなプログラムになると、リテラルの保守性の悪さが出てきそうな気がします。
かといって、変数にするとなるとエラーメッセージ1つ1つに変数名をつけるのが大変だし、
"○○がありません。"のように、エラーメッセージに変数を含む場合も困る気がします。

一般的にはどのように実装しているのですか?