sig
  type range = Int32.t * Int32.t
  type textdomain = string
  type locale = string
  type dir = string
  type filename = string
  type codeset = string
  exception CompileProblemReadingFile of GettextTypes.filename * string
  exception CompileExtractionFailed of GettextTypes.filename * string * int
  exception CompileExtractionInterrupted of GettextTypes.filename * string *
              int
  exception DomainFileDoesntExist of GettextTypes.filename list
  exception FormatInconsistent of string * string
  exception GettextUninitialized
  exception MoInvalidOptions of Lexing.lexbuf * string
  exception MoInvalidPlurals of Lexing.lexbuf * string
  exception MoInvalidContentType of Lexing.lexbuf * string
  exception MoInvalidTranslationSingular of string * int
  exception MoInvalidTranslationPlural of string list * int
  exception MoJunk of string * string list
  exception MoEmptyEntry
  exception MoInvalidFile
  exception MoInvalidHeaderNegativeStrings
  exception MoInvalidHeaderTableStringOutOfBound of GettextTypes.range *
              GettextTypes.range
  exception MoInvalidHeaderTableTranslationOutOfBound of GettextTypes.range *
              GettextTypes.range
  exception MoInvalidHeaderTableTranslationStringOverlap of
              GettextTypes.range * GettextTypes.range
  exception MoInvalidStringOutOfBound of int * int
  exception MoInvalidTranslationOutOfBound of int * int
  exception MoCannotOpenFile of string
  exception PoInvalidFile of string * Lexing.lexbuf * Pervasives.in_channel
  exception PoFileInvalidIndex of string * int
  exception PoFileDoesntExist of string
  exception PoInconsistentMerge of string * string
  exception TranslateStringNotFound of string
  exception LocalePosixUnparseable of string
  type dependencies =
      (GettextTypes.textdomain * GettextTypes.codeset option *
       GettextTypes.dir option)
      list
  module type INIT_TYPE =
    sig
      val textdomain : GettextTypes.textdomain
      val codeset : GettextTypes.codeset option
      val dir : GettextTypes.dir option
      val dependencies : GettextTypes.dependencies
    end
  module MapString :
    sig
      type key = string
      type +'a t
      val empty : 'GettextTypes.MapString.t
      val is_empty : 'GettextTypes.MapString.t -> bool
      val add :
        GettextTypes.MapString.key ->
        '-> 'GettextTypes.MapString.t -> 'GettextTypes.MapString.t
      val find :
        GettextTypes.MapString.key -> 'GettextTypes.MapString.t -> 'a
      val remove :
        GettextTypes.MapString.key ->
        'GettextTypes.MapString.t -> 'GettextTypes.MapString.t
      val mem :
        GettextTypes.MapString.key -> 'GettextTypes.MapString.t -> bool
      val iter :
        (GettextTypes.MapString.key -> '-> unit) ->
        'GettextTypes.MapString.t -> unit
      val map :
        ('-> 'b) ->
        'GettextTypes.MapString.t -> 'GettextTypes.MapString.t
      val mapi :
        (GettextTypes.MapString.key -> '-> 'b) ->
        'GettextTypes.MapString.t -> 'GettextTypes.MapString.t
      val fold :
        (GettextTypes.MapString.key -> '-> '-> 'b) ->
        'GettextTypes.MapString.t -> '-> 'b
      val compare :
        ('-> '-> int) ->
        'GettextTypes.MapString.t -> 'GettextTypes.MapString.t -> int
      val equal :
        ('-> '-> bool) ->
        'GettextTypes.MapString.t -> 'GettextTypes.MapString.t -> bool
    end
  module MapTextdomain :
    sig
      type key = GettextTypes.textdomain
      type +'a t
      val empty : 'GettextTypes.MapTextdomain.t
      val is_empty : 'GettextTypes.MapTextdomain.t -> bool
      val add :
        GettextTypes.MapTextdomain.key ->
        '->
        'GettextTypes.MapTextdomain.t -> 'GettextTypes.MapTextdomain.t
      val find :
        GettextTypes.MapTextdomain.key ->
        'GettextTypes.MapTextdomain.t -> 'a
      val remove :
        GettextTypes.MapTextdomain.key ->
        'GettextTypes.MapTextdomain.t -> 'GettextTypes.MapTextdomain.t
      val mem :
        GettextTypes.MapTextdomain.key ->
        'GettextTypes.MapTextdomain.t -> bool
      val iter :
        (GettextTypes.MapTextdomain.key -> '-> unit) ->
        'GettextTypes.MapTextdomain.t -> unit
      val map :
        ('-> 'b) ->
        'GettextTypes.MapTextdomain.t -> 'GettextTypes.MapTextdomain.t
      val mapi :
        (GettextTypes.MapTextdomain.key -> '-> 'b) ->
        'GettextTypes.MapTextdomain.t -> 'GettextTypes.MapTextdomain.t
      val fold :
        (GettextTypes.MapTextdomain.key -> '-> '-> 'b) ->
        'GettextTypes.MapTextdomain.t -> '-> 'b
      val compare :
        ('-> '-> int) ->
        'GettextTypes.MapTextdomain.t ->
        'GettextTypes.MapTextdomain.t -> int
      val equal :
        ('-> '-> bool) ->
        'GettextTypes.MapTextdomain.t ->
        'GettextTypes.MapTextdomain.t -> bool
    end
  type failsafe = Ignore | InformStderr of (exn -> string) | RaiseException
  type t = {
    failsafe : GettextTypes.failsafe;
    textdomains :
      (GettextTypes.codeset option * GettextTypes.dir option)
      GettextTypes.MapTextdomain.t;
    categories : GettextTypes.locale GettextCategory.MapCategory.t;
    language : GettextTypes.locale option;
    codeset : GettextTypes.codeset;
    path : GettextTypes.dir list;
    default : GettextTypes.textdomain;
  }
  type t' =
      bool ->
      GettextTypes.textdomain option ->
      string -> (string * int) option -> GettextCategory.category -> string
  type endianess = BigEndian | LittleEndian
  type mo_header = {
    endianess : GettextTypes.endianess;
    file_format_revision : int32;
    number_of_strings : int32;
    offset_table_strings : int32;
    offset_table_translation : int32;
    size_of_hashing_table : int32;
    offset_of_hashing_table : int32;
  }
  type mo_translation = {
    project_id_version : string option;
    report_msgid_bugs_to : string option;
    pot_creation_date : string option;
    po_revision_date : string option;
    last_translator : string option;
    language_tream : string option;
    mime_version : string option;
    content_type : string option;
    content_transfer_encoding : string option;
    plural_forms : string option;
    content_type_charset : string;
    nplurals : int;
    fun_plural_forms : int -> int;
  }
  type translation =
      Singular of string * string
    | Plural of string * string * string list
  type po_translation =
      PoSingular of string list * string list
    | PoPlural of string list * string list * string list list
  type po_filepos = GettextTypes.filename * int
  type po_special = string
  type po_commented_translation = {
    po_comment_special : GettextTypes.po_special list;
    po_comment_filepos : GettextTypes.po_filepos list;
    po_comment_translation : GettextTypes.po_translation;
  }
  type po_translations =
      GettextTypes.po_commented_translation GettextTypes.MapString.t
  type po_content = {
    no_domain : GettextTypes.po_translations;
    domain : GettextTypes.po_translations GettextTypes.MapTextdomain.t;
  }
  module type REALIZE_TYPE =
    sig val realize : GettextTypes.t -> GettextTypes.t' end
end