    # File lib/ramaze/contrib/gettext/mo.rb, line 76
      def load_from_stream(io)
        magic = io.read(4)
        case magic
        when MAGIC_BIG_ENDIAN
          @little_endian = false
        when MAGIC_LITTLE_ENDIAN
          @little_endian = true
        else
          raise InvalidFormat.new("Unknown signature %s" % magic.dump)
        end

        header = Header.new(magic, *(io.read(4 * 6).unpack(@little_endian ? 'V6' : 'N6')))
        raise InvalidFormat.new(sprintf("file format revision %d isn't supported", header.revision)) if header.revision > 0

        io.pos = header.orig_table_offset
        orig_table_data = io.read((4 * 2) * header.nstrings).unpack(@little_endian ? 'V*' : 'N*')

        io.pos = header.translated_table_offset
        trans_table_data = io.read((4 * 2) * header.nstrings).unpack(@little_endian ? 'V*' : 'N*')

        original_strings = Array.new(header.nstrings)
        for i in 0...header.nstrings
          io.pos = orig_table_data[i * 2 + 1]
          original_strings[i] = io.read(orig_table_data[i * 2 + 0])
        end

        clear
        for i in 0...header.nstrings
          io.pos = trans_table_data[i * 2 + 1]
          str = io.read(trans_table_data[i * 2 + 0])

          if original_strings[i] == ""
            if str
              @charset = nil
              @nplurals = nil
              @plural = nil
              str.each_line{|line|
                if /^Content-Type:/i =~ line and /charset=((?:\w|-)+)/i =~ line
                  @charset = $1
                elsif /^Plural-Forms:\s*nplurals\s*\=\s*(\d*);\s*plural\s*\=\s*([^;]*)\n?/ =~ line
                  @nplurals = $1
                  @plural = $2
                end
                break if @charset and @nplurals
              }
              @nplurals = "1" unless @nplurals
              @plural = "0" unless @plural
            end
          else
            if @output_charset
              begin
                str = Iconv.iconv(@output_charset, @charset, str).join if @charset
              rescue Iconv::Failure
                if $DEBUG
                  $stderr.print "@charset = ", @charset, "\n"
                  $stderr.print "@output_charset = ", @output_charset, "\n"
                  $stderr.print "msgid = ", original_strings[i], "\n"
                  $stderr.print "msgstr = ", str, "\n"
                end
              end
            end
          end
          self[original_strings[i]] = str
        end
        self
      end