code: func (po *Po) parseHeaders() {
  	// Make sure we end with 2 carriage returns.
  	raw := po.Get("") + "\n\n"
  
  	// Read
  	reader := bufio.NewReader(strings.NewReader(raw))
  	tp := textproto.NewReader(reader)
  
  	var err error
  
  	// Sync Headers write.
  	po.Lock()
  	defer po.Unlock()
  
  	po.Headers, err = tp.ReadMIMEHeader()
  	if err != nil {
  		return
  	}
  
  	// Get/save needed headers
  	po.Language = po.Headers.Get("Language")
  	po.PluralForms = po.Headers.Get("Plural-Forms")
  
  	// Parse Plural-Forms formula
  	if po.PluralForms == "" {
  		return
  	}
  
  	// Split plural form header value
  	pfs := strings.Split(po.PluralForms, ";")
  
  	// Parse values
  	for _, i := range pfs {
  		vs := strings.SplitN(i, "=", 2)
  		if len(vs) != 2 {
  			continue
  		}
  
  		switch strings.TrimSpace(vs[0]) {
  		case "nplurals":
  			po.nplurals, _ = strconv.Atoi(vs[1])
  
  		case "plural":
  			po.plural = vs[1]
  
  			if expr, err := plurals.Compile(po.plural); err == nil {
  				po.pluralforms = expr
  			}
  
  		}
  	}
  }
docs: // parseHeaders retrieves data from previously parsed headers