private function partialLangMatches(
        $fromField,
        MatchedPreferenceInterface $matchedPreference,
        PreferenceInterface $newClientPref
    ) {
        $serverPref = $matchedPreference->getServerPreference();
        $oldClientPref = $matchedPreference->getClientPreference();

        // Note that this only supports the simplest case of (e.g.) en-* matching en-GB and en-US, additional
        // Language tags are explicitly ignored
        list($clientMainLang) = explode('-', $newClientPref->getVariant());
        list($serverMainLang) = explode('-', $serverPref->getVariant());

        return PreferenceInterface::LANGUAGE === $fromField
            && PreferenceInterface::PARTIAL_WILDCARD === $serverPref->getPrecedence()
            && $clientMainLang == $serverMainLang
            && $newClientPref->getPrecedence() > $oldClientPref->getPrecedence();
    }