docs: def find_name(tagtype: str, name: str, language: {str, 'Language', None}=None):
          """
          Find the subtag of a particular `tagtype` that has the given `name`.
  
          The default language, "und", will allow matching names in any language,
          so you can get the code 'fr' by looking up "French", "Français", or
          "francés".
  
          Occasionally, names are ambiguous in a way that can be resolved by
          specifying what name the language is supposed to be in. For example,
          there is a language named 'Malayo' in English, but it's different from
          the language named 'Malayo' in Spanish (which is Malay). Specifying the
          language will look up the name in a trie that is only in that language.
  
          In a previous version, we thought we were going to deprecate the
          `language` parameter, as there weren't significant cases of conflicts
          in names of things between languages. Well, we got more data, and
          conflicts in names are everywhere.
  
          Specifying the language that the name should be in is still not
          required, but it will help to make sure that names can be
          round-tripped.
  
          >>> Language.find_name('language', 'francés')
          Language.make(language='fr')
  
          >>> Language.find_name('region', 'United Kingdom')
          Language.make(region='GB')
  
          >>> Language.find_name('script', 'Arabic')
          Language.make(script='Arab')
  
          >>> Language.find_name('language', 'norsk bokmål')
          Language.make(language='nb')
  
          >>> Language.find_name('language', 'norsk')
          Language.make(language='no')
  
          >>> Language.find_name('language', 'norsk', 'en')
          Traceback (most recent call last):
              ...
          LookupError: Can't find any language named 'norsk'
  
          >>> Language.find_name('language', 'norsk', 'no')
          Language.make(language='no')
  
          >>> Language.find_name('language', 'malayo', 'en')
          Language.make(language='mbp')
  
          >>> Language.find_name('language', 'malayo', 'es')
          Language.make(language='ms')
  
          Some langauge names resolve to more than a language. For example,
          the name 'Brazilian Portuguese' resolves to a language and a region,
          and 'Simplified Chinese' resolves to a language and a script. In these
          cases, a Language object with multiple subtags will be returned.
  
          >>> Language.find_name('language', 'Brazilian Portuguese', 'en')
          Language.make(language='pt', region='BR')
  
          >>> Language.find_name('language', 'Simplified Chinese', 'en')
          Language.make(language='zh', script='Hans')
  
          A small amount of fuzzy matching is supported: if the name can be
          shortened to match a single language name, you get that language.
          This allows, for example, "Hakka dialect" to match "Hakka".
  
          >>> Language.find_name('language', 'Hakka dialect')
          Language.make(language='hak')
          """
  
          # No matter what form of language we got, normalize it to a single
          # language subtag
          if isinstance(language, Language):
              language = language.language
          elif isinstance(language, str):
              language = get(language).language
          if language is None:
              language = 'und'
  
          code = name_to_code(tagtype, name, language)
          if code is None:
              raise LookupError("Can't find any %s named %r" % (tagtype, name))
          if '-' in code:
              return Language.get(code)
          else:
              data = {tagtype: code}
              return Language.make(**data)