code: func (lt *Translator) getFieldTranslator(field string) (*FieldTranslator, error) {
  	lt.lock.RLock()
  	if tr, ok := lt.fields[field]; ok {
  		lt.lock.RUnlock()
  		return tr, nil
  	}
  	lt.lock.RUnlock()
  	lt.lock.Lock()
  	defer lt.lock.Unlock()
  	if tr, ok := lt.fields[field]; ok {
  		return tr, nil
  	}
  	lft, err := NewFieldTranslator(lt.dirname, field)
  	if err != nil {
  		return nil, errors.Wrap(err, "creating new FieldTranslator")
  	}
  	lt.fields[field] = lft
  	return lft, nil
  }
docs: // getFieldTranslator retrieves or creates a FieldTranslator for the given field.