code: func (b *Bundle) TfuncAndLanguage(pref string, prefs ...string) (TranslateFunc, *language.Language, error) {
  	lang := b.supportedLanguage(pref, prefs...)
  	var err error
  	if lang == nil {
  		err = fmt.Errorf("no supported languages found %#v", append(prefs, pref))
  	}
  	return func(translationID string, args ...interface{}) string {
  		return b.translate(lang, translationID, args...)
  	}, lang, err
  }
docs: // TfuncAndLanguage returns a TranslateFunc for the first Language that
  // has a non-zero number of translations in the bundle.
  //
  // The returned Language matches the the first language preference that could be satisfied,
  // but this may not strictly match the language of the translations used to satisfy that preference.
  //
  // For example, the user may request "zh". If there are no translations for "zh" but there are translations
  // for "zh-cn", then the translations for "zh-cn" will be used but the returned Language will be "zh".
  //
  // It can parse languages from Accept-Language headers (RFC 2616),
  // but it assumes weights are monotonically decreasing.