package Translator is

  Default_Start: constant Character := '{';
  Default_Stop : constant Character := '}';

  type Replacement is private;
  Null_Replacement: constant Replacement;

  type Replacements is array (Positive range <>) of Replacement;

  function Replace (Name, by: String) return Replacement;

  function Translate (Message        : String;
                      Placeholder    : Replacement := Null_Replacement;
                      Start_Delimiter: Character   := Default_Start;
                      Stop_Delimiter : Character   := Default_Stop) return String;
  function Translate (Message        : String;
                      Placeholders   : Replacements;
                      Start_Delimiter: Character   := Default_Start;
                      Stop_Delimiter : Character   := Default_Stop) return String;

  Replacement_Error, Syntax_Error: exception;

private

  ... (not shown)

end Translator;